Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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.053 c
15-1454623843
KilkennyCat
2016-02-05 01:10
2017.01.15
Задачка про сеть.


15-1448227801
Юрий
2015-11-23 00:30
2017.01.15
С днем рождения ! 23 ноября 2015 понедельник


15-1447932039
DayGaykin
2015-11-19 14:20
2017.01.15
Умножение и сложение UInt64 с переполнением.


2-1431696831
Дмитрий
2015-05-15 16:33
2017.01.15
Редактирование двух связанных таблиц в одной строке таблицы


3-1308469793
she-wolf2829
2011-06-19 11:49
2017.01.15
запуск хранимых процедур





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский