Форум: "Прочее";
Текущий архив: 2017.01.15;
Скачать: [xml.tar.bz2];
ВнизАдрес константы внутри процедуры Найти похожие ветки
← →
Limpo © (2015-12-07 12:15) [0]Имеем константу, объявленную внутри процедуры:
procedure Test;
const
cTest: string = ""; // <-- КОНСТАНТА
begin
beep;
end;
Постоянен ли адрес этой константы в ВАП процесса на всем протяжении выполнения программы?
Зависит ли от версии Delphi?
← →
Limpo © (2015-12-07 12:19) [1]Немного переформулирую - можно ли использовать ссылку на эту константу вне кода процедуры Test?
← →
Игорь Шевченко © (2015-12-07 13:21) [2]
> Постоянен ли адрес этой константы в ВАП процесса на всем
> протяжении выполнения программы?
Да
← →
sniknik © (2015-12-07 13:49) [3]а зачем объявлять локально если нужна глобально? константы же в любом случае глобальные, возможность объявить локально это же чисто для удобства программиста, не более (ну типа нужна только в этой процедуре и засорять код где-то в другом месте не хочется). а раз объявить глобальную удобнее как и пользоваться именем вместо ссылки (еще и выковырять ее нужно) то в чем смысл?
тем более пустую строку... - SysUtils.EmptyStr (если тут конечно не чисто "пример в вакууме", а на деле есть значение)
← →
Limpo © (2015-12-07 13:55) [4]пример в вакууме, а отдается PChar на эту константу из DLL
← →
Юрий Зотов © (2015-12-07 16:20) [5]А DLL на чем писана?
← →
Limpo © (2015-12-07 16:38) [6]DLL как раз и написана на дельфи.
Впрочем, EXE тоже.
И не надо про ShareMem, вот как есть так есть :)
← →
Юрий Зотов © (2015-12-07 18:04) [7]Я имел в виду не ShareMem, а другое - если бы DLL была не на Delphi, то сабж теряет смысл.
Но похоже, что доступны исходники DLL. Тогда все же лучше [3].
← →
Limpo © (2015-12-07 18:10) [8]
> если бы DLL была не на Delphi, то сабж теряет смысл.
почему?
← →
Юрий Зотов © (2015-12-07 18:15) [9]Потому что компилятор Delphi размещает локальную константу, как глобальную (и поэтому ее адрес не меняется). Но другие компиляторы могут поступать иначе.
← →
Игорь Шевченко © (2015-12-08 10:24) [10]
> Но другие компиляторы могут поступать иначе.
Например ?
← →
Rouse_ © (2015-12-08 19:08) [11]
> Игорь Шевченко © (08.12.15 10:24) [10]
> Например ?
Yagarto компилер инициализирует локальные константы на стеке, если указать правильные параметры сборки (но это правда под арм)
← →
Rouse_ © (2015-12-08 19:12) [12]Не правильно оформил мысль, короче можно указать что данная строка представлена как локальный статический массив (который априори располагается на стеке) но с инициализацией в эпилоге функции
← →
Sha © (2015-12-08 19:36) [13]Игорь Шевченко © (08.12.15 10:24) [10]
Rouse_ © (08.12.15 19:12) [12]
В PL/I аналогично работал init.
← →
Игорь Шевченко © (2015-12-08 23:24) [14]Sha © (08.12.15 19:36) [13]
Это я понимаю, в С можно локальную переменную инициализировать и ей будет в начале выполнения кода функции присвоено значение. Я почему спрашивал, может, какой FreePascal иначе работает, а всякая экзотика в контексте данной ветки вряд ли имеет такое уж значение.
← →
Rouse_ © (2015-12-09 00:12) [15]Ну Юра говорил про библиотеку, которая может быть реализована любым сторонним компилером. Поэтому вроде как все валидно в контексте изначального вопроса
← →
Германн © (2015-12-09 00:53) [16]
> Rouse_ © (09.12.15 00:12) [15]
> Limpo © (07.12.15 16:38) [6]
>
> DLL как раз и написана на дельфи.
> Впрочем, EXE тоже.
Какой сторонний компиллер может реализовать что либо из программы написанной на Дельфи?
← →
KSergey © (2015-12-11 10:36) [17]Какой сторонний компилер позволяет изменять значения констант??
А дельфи - позволяет (для типизированных). Отсюда очеведно, что никто ни на каком стеке переменные не переинициализирует при каждом вызове.
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2017.01.15;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.057 c