-
> Anatoly Podgoretsky © (06.06.08 14:41) [59]
Это не я писал, хотя это верно :) Последовательность действий по воспроизведению бага описана [16]. Тут суть в том, что модули на диске не перезаписываются и дата у них не меняется. Изменения делаются непосредственно в среде Дельфи. И некоторые из них Дельфи учитывает в зависимых модулях, а некоторые - нет.
-
> Sha (06.06.2008 14:52:00) [60]
Я уже матюгался? Нет, ну тогда матюгаюсь, Борланд пошел по попсовому пути, набросать много не нужных функций, и попутно теряя надежность компилятора, делая всякие колокольчики. А переход к ebarcader может ситуацию еще больше ухудшить. Все лучшие кадры подарили или Микрософту или Ораклу и другим фирмам.
-
> Sha © (06.06.08 14:03) [57] > > Плохиш © (06.06.08 13:42) [55] > > для последнего поля выделяется один байт, только в одном > случае, когда выравнивание установлено в 1 {A1}. > > Здесь, конечно, дело вкуса. > > Тебе почему-то удобней думать, что последнее поле, в котором > лежит однобайтовая переменная, занимает 8 байт,
Согласись, что понятия "занимает байт" и "распределено байт" несколько отличаются. И мне как-то удобней думать, что структуры данных занимают столько байт, как это описано в документации разработчиков компилятора.
-
> Anatoly Podgoretsky © (06.06.08 15:09) [61]
+1 :-(
-
Удалено модератором Примечание: offtopic
-
Удалено модератором Примечание: offtopic
-
Удалено модератором Примечание: offtopic
-
Удалено модератором Примечание: offtopic
-
Нифигасе, страсти накалились 8-O
-
> Плохиш © (06.06.08 15:15) [62]
Вот пример, который прояснит мою позицию. Известно, что память в Д7 под строки выделяется двойными словами. И если длина строки кратна 4, то терминатор попадает в отдельный dword. Но никому ведь не приходит в голову говорить, что терминатор занимает или под него выделено двойное слово, потому что три лишних байта потребовались строке в целом, а не терминатору. Т.е. размер строки был округлен до 4 вверх. Так и случае с записями. Лишние байты не принадлежат последнему полю. На мой взгляд.
-
Это понятно, но это психология, тут претензии только к Борланду, а есть ли при работе ошибка?
-
> Лишние байты не принадлежат последнему полю.
конечно не приналежат они "боксам" внутри записи принадлежат, а вот размеры "боксов" уже плавают в зависимости от самого большого типа и от директивы выравнивания интересный эксперимент
TMR1=Record
a:Byte;
c:Word;
d:Byte;
e:Word;
End;
TMR2=Record
a:Byte;
c:Word;
d:Byte;
e:Integer;
End;
хотя
TMR1=Record
a:Byte;
c:Word;
d:Byte;
e:Word;
End;
TMR2=Record
a:Byte;
c:Word;
d:Byte;
e:Integer;
End;
-
в последнем типе ошибся
TMR2=Record
a:Byte;
c:Word;
d:Byte;
e:Integer;
End;
-
так, еще раз и без косяков... :)
TMR1=Record
a:Byte;
"просвет" 1b
c:Word;
d:Byte;
"просвет" 1b
e:Word;
End; 8b
TMR2=Record
a:Byte;
"просвет" 1b
c:Word;
d:Byte;
"просвет" 3b
e:Integer;
End; 12b
TMR1=Record
a:Byte;
"просвет" 1b
c:Word;
d:Byte;
"просвет" 1b
e:Word;
End; 8b
TMR2=Record
a:Byte;
"просвет" 1b
c:Word;
d:Byte;
"просвет" 1b
e:Integer;
End; 10b
-
> Anatoly Podgoretsky © (06.06.08 16:45) [70] > ... а есть ли при работе ошибка?
В [51] я попытался кратко изложить логику работы компилятора при выравнивании полей записи и определении размера записи. Более того, Борланд следует приведенному алгоритму и во вложенных структурах. Ошибок не обнаружено :)
Там же я сделал предположение, зачем потребовался такой не совсем очевидный алгоритм определения размера записи. Здесь у Борланда все сходится идеально.
-
> зачем потребовался такой не совсем очевидный алгоритм определения > размера записи.
Может связано с оптимизацией работы кучи ?
-
Я уже писал, для оптимизации компилятора и частично работы. Так писать проще, достаточно провести анализ только для первой переменной, остальные автоматическу получаются выровнеными.
-
Может и не в тему http://forum.sources.ru/index.php?showtopic=110906Формально по ссылке наверное написано правильно, но, если честно, моему осознанию сильно мешает то, что автор не привел свое толкование примененных теринов. На сколько я смог понять, между словами "выравнивание" и "размер" у него подразумевается знак равенства.
-
> KSergey © (07.06.08 09:42) [77] > Формально по ссылке наверное написано правильно,
Беда только в том, что не про дельфи :) Но это обсуждение натолкнуло меня на мысль, что в дельфи у автора оно как-то примерно так же устроено, похоже.
|