Текущий архив: 2003.02.06;
Скачать: CL | DM;
ВнизТипы переменных Найти похожие ветки
← →
SergeN (2003-01-28 15:29) [0]Привет!
Такая ситуация:
Переменная i принимает два значения:1 и -1.
Какой тип лучше использовать?
← →
gsu (2003-01-28 15:31) [1]boolean
1..-1
integer ?
← →
han_malign (2003-01-28 15:33) [2]Regardless of the state of the $A directive, variables and typed constants are always aligned for optimal access.
- так что, для Intel>386 архитектуры, по любому 4-е байта занимает.
← →
Anatoly Podgoretsky (2003-01-28 15:33) [3]Integer
← →
SergeN (2003-01-28 15:37) [4]Спасибо! Просто беспокоюсь за ресурсы...
← →
Юрий Зотов (2003-01-28 15:41) [5]> han_malign © (28.01.03 15:33)
> ...are always aligned for optimal access
> по любому 4-е байта занимает.
Какое отношение имеет выравнивание к размеру? До сих пор я полагал, что никакого. Вероятно, один из нас неправ.
> SergeN (28.01.03 15:29)
> Какой тип лучше использовать?
Смотря что значит "лучше". Если для скорости, то integer, а если для размера, то однобайтовый (SmallInt или ShortInt - точно не помню, посмотрите в справке).
← →
bis (2003-01-28 15:45) [6]можно всего 2 бита использовать под это ...
только зачем ?
← →
Shadow (2003-01-28 15:45) [7]asm %))
← →
Anatoly Podgoretsky (2003-01-28 15:48) [8]Так не спрашивают как защифровать, упаковать два абстрактных значения, а конкретно в чем хринить именно единиуц и минус единицу. Для это походят именно чисто целочисленные типы.
← →
Chubais (2003-01-28 15:51) [9]
> можно всего 2 бита использовать под это ...
> только зачем ?
гыыы
а почему это 2?
по-моему, одного хватит...
← →
passm (2003-01-28 16:08) [10]type
TVerySmallInteger = -1..1;
Использует 1 байт.
← →
han_malign (2003-01-28 16:12) [11]2 Юрий Зотов © (28.01.03 15:41)
Немного попутал:
program Align;
{$APPTYPE CONSOLE}
{$A-}
uses Windows;
type TT=class
private
b: byte;
w: word;
dw: DWORD;
public
function ByteSz: integer;
function WordSz: integer;
end;
function TT.ByteSz: integer;
begin
Result:=DWORD(@w)-DWORD(@b);
end;
function TT.WordSz: integer;
begin
Result:=DWORD(@dw)-DWORD(@w);
end;
var
b: byte;
w: word;
dw: DWORD;
begin
with TT.Create do begin
Writeln("Byte size - ",ByteSz);
Writeln("Word size - ",WordSz);
Free;
end;
Writeln("Local Byte size - ",DWORD(@w)-DWORD(@b));
Writeln("Local Word size - ",DWORD(@dw)-DWORD(@w));
end.
Display:
Byte size - 1
Word size - 2
Local Byte size - 2
Local Word size - 2
Для {$A+} (по умолчанию) соответственно
Byte size - 2
Word size - 2
Local Byte size - 2
Local Word size - 2
З.Ы. Так что лучше SmallInt - если с выравниванием, или ShortInt - если без...
← →
Palladin (2003-01-28 16:12) [12]2 passm
> Использует 1 байт
shortint тобишь
← →
REA (2003-01-28 16:19) [13]Типа так лучше читать, фиг знает сколько байт используется:
TGoodReadableSet = (grPositive, grNegative);
IntValues: Array[TGoodRadableSet] = (-1, 1);
A: TGoodReadableSet;
A := grPositive;
I := IntVlaues[A];
← →
passm (2003-01-28 17:05) [14]Palladin © (28.01.03 16:12)> Он самый.
Для уверенности можно посмотреть:
type
TVerySmallInteger = -1..1;
...
LabelX.Caption:= IntToStr(SizeOf(TVerySmallInteger))
...
Относится и к остальным числовым типам/переменным.
← →
Юрий Зотов (2003-01-28 17:06) [15]> han_malign © (28.01.03 16:12)
Интересный тест. Правда, все это есть и в справке...
Знаете, а все-таки размер однобайтовой переменной - ровно 1 байт. Честное слово. Независимо от выравнивания. И то, что после нее идет неиспользуемый участок памяти, этот размер не увеличивает.
То же касается и двубайтовых, да и любых других переменных.
Страницы: 1 вся ветка
Текущий архив: 2003.02.06;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.01 c