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

Вниз

Адрес константы внутри процедуры   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.016 c
1-1345382325
abolnykh
2012-08-19 17:18
2017.01.15
Импорт объекта из dll


2-1428036109
Xmen
2015-04-03 07:41
2017.01.15
Работа с файлами которых имена в Unicode.


2-1431020136
Zheksonz
2015-05-07 20:35
2017.01.15
Можно ли в поля Blob Graphic загружать jpg файлы?


4-1281052143
korbin dalas
2010-08-06 03:49
2017.01.15
Как прочитать содержимое HDD без использования файлов?


15-1454880601
Юрий
2016-02-08 00:30
2017.01.15
С днем рождения ! 8 февраля 2016 понедельник