1. Пользуйтесь тегами кода. - [code] ... [/code] 2. Точно указывайте язык, название и версию компилятора (интерпретатора). 3. Название темы должно быть информативным. В описании темы указываем язык!!!
Новые вопросы - какая функция определяет наличие или отсутствие утечек памяти? Я скачал ВинАДУ, поставил, как подключить пакет, содержащий заголовки виндовых библиотек? with ADA.Windows не рабтает, нет такого пакета.
Даже если дословно, буква в букву, переписать описание типа Controlled в другой модуль, то для него уже не работает автовызов Initialize и Finalize
Если дословно (буква в букву) переписать все, что нужно в другой модуль - то он у тебя даже не откомпилируется. Потому как
gnatmake -ws -c -u -P/home/forum_test/forum.gpr my_con.ads --subdirs=debug -cargs -g -O0 gcc -c -g -gnatVa -gnatw.e -gnata -g -gnatf -gnat05 -g -O0 -I- -gnatA /home/forum_test/my_con.ads my_con.ads:3:06: warning: "system.finalization_root" is an internal GNAT unit my_con.ads:3:06: warning: use of this unit is non-portable and version-dependent my_con.ads:3:06: cannot depend on "Finalization_Root" (wrong categorization) my_con.ads:21:24: warning: declaration of "=" hides one at line 19 my_con.ads:21:24: warning: declaration of "=" hides one in package Standard gnatmake: "/home/forum_test/my_con.ads" compilation error
Finalization_Root - это внутренний пакет, нельзя его использовать в своих целях. Это жестко зашито в GNAT.
Цитата
Ещё вопрос: почему ссылка на строку - это 64 бита? Указатель на начало и конец строки? Или указатель на начало и на длину?
Смотри. Во-первых, это только в GNAT-компиляторе. Во всех остальных для access-типов всегда используются только thin-pointers (ага, худые). В GNAT-е же для неограниченных типов (массивы, строки, без жесткого указания длины, всякие Unbounded_String-и) используется "fat pointer" - это два указателя: один - на данные, другой - на границы массива. Но это, насколько я помню, отключаемо. Можно заставить компилятор всегда использовать thin-pointers, но это может сказаться на производительности.
Цитата
Как хранятся дин массивы в памяти? Выделяются на стеке?
Динамические - это какие? Вот эти:
procedure P(N : Integer) is arr : array (1 .. N) of Integer; -- <--- ??? begin -- ... end P;