Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.27;
Скачать: CL | DM;

Вниз

Вопрос на засыпку   Найти похожие ветки 

 
Kozhanov ©   (2002-05-23 18:15) [0]

Господа, кто знает как Delphi
представляет в памяти машины следующие структуры :

1. array[1..2] of integer;
2. TMyRecord = record
mrField1 : Integer;
mrField2 : String;
end;
Мне этот вопрос жутко интересен ! Какие будут варианты ???


 
MBo ©   (2002-05-23 18:26) [1]

1.
Addr0: array[1]
Addr0+4: array[2]
2.
Addr0: mrfield1
Addr0+4: mrField2 (pointer), 4 байта


 
Kozhanov ©   (2002-05-23 18:39) [2]

> MBo
Спасибо.

А можно ли сделать вот какую штуку :
"Самому" сформировать структуру типа запись и заставить
Delphi воспринимать её за свою родную (Например,
"самому" сделать record и обмануть Delphi ) ???


 
wicked ©   (2002-05-23 18:47) [3]

2 Kozhanov ©
как это - самому?... указать, что по какому смещению лежит?...


 
Kozhanov ©   (2002-05-23 18:50) [4]

> wicked
Ага.
Вот такой вот хакерский приём...


 
wicked ©   (2002-05-23 18:58) [5]

да ничего он не хакерский... просто надо знать, сколько байт в памяти берёт каждый тип - в хелпе всё прекрасно расписано...
единственное но - delphi любит выравнивать поля записей по границе слов/двойных слов ради более быстрого к ним доступа... например:

two = record
one: real; //6 bytes
two: real; //6 bytes
end;


по идее структура должна занимать 12 байт, но фактически она может занять все 16...
вот если это надо обойти, применяется слово packed... тогда delphi ничего не выравнивает...
а если надо точно указать смещения, просто используй директиву packed и пустые поля-болванки для заполнения промежутков между полями данных...
напоследок: д(т)ерзай и дружи с sizeof... ;)


 
MBo ©   (2002-05-23 21:15) [6]

1) a:array[1..4] of byte
b:integer absolute a;
a[3]:=2;
qqq:=b;

2) ta=record
a1:integer;
a2



Страницы: 1 вся ветка

Текущий архив: 2002.06.27;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.014 c
1-88938
Wolverin
2002-06-15 15:37
2002.06.27
Ресурсы и AVI


1-88801
N A N
2002-06-14 19:46
2002.06.27
Как создать файл ресурсов....


8-88957
Lider
2002-02-14 22:52
2002.06.27
Вывод картинки (TImage) на видео (TMediaPlayer)


3-88757
whois
2002-06-04 17:38
2002.06.27
ещще раз JPEG в БД


1-88791
TRUP
2002-06-16 13:30
2002.06.27
Как очистить папку HISTORY?