Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как выделить область в стеке? [D7, WinXP]


Страницы:   1 2 3

HydraMarat ©   (2005-02-22 17:32:00) 

Есть ли какая-нибудь функция типа GetMem для стека? Или это в принципе невозможно? Видел в модуле Grids.pas функцию StackAlloc вроде как "декрементирует" SP, но "глобально" она конечно же не работает, только в пределах одной подпрограммы (ну и видимо без вызовов других). Вот, например, C++ умеет же размещать в стеке объекты. Я понимаю, что это на уровне компилятора, но КАК-то же это делается. Может хоть ссылочку на подобное более детальную инфу дадите?

Спасибо.


Набережных С.   (2005-02-22 19:09:00) [41]


> Как это осуществить?

Для начала выучить ассемблер.
Ты так ничего и не понял:( Все, я иссяк...


HydraMarat   (2005-02-22 18:59:00) [42]

Поясню на примере кода, я уж начинаю думать что вопрос "не из той оперы". Например, юзер написал:

function F(A, B: Integer): Double; lib "Lib" name "Name"

Интерпретатор (который пишется мною) встречает вызов: F(3, 4); Он загружает Lib, находит адрес Name, теперь ей надо передать параметры, и вызвать. Как это осуществить?


Набережных С.   (2005-02-22 18:55:00) [43]


> HydraMarat   (22.02.05 18:47) [12]
> Как интерпретатор передаст ей параметры?


Зависит от соглашения о передаче параметров. Может через регистры, а может через стек. В последнем случае для размещения параметров в стеке используются инструкции процессора Push.
Видишь ли, очень грубо говоря, разные функции для своих параметров используют одни и те-же ячейки стека, и в том месте, где для одной расположена переменная А: integer, для другой может находиться B: double. Чтобы понимать всю эту кухню нужно представлять устройство процессора хотя-бы в общих чертах.


HydraMarat   (2005-02-22 18:47:00) [44]

Ну чем оно плохо-то? Представьте что пишется интерпретатор, вот он считывает код, где пользователь вызывает функцию API. Как интерпретатор передаст ей параметры?

Если я чего-то не понимаю объясните!


Набережных С.   (2005-02-22 18:43:00) [45]

Совсем плохо дело:(


Amoeba   (2005-02-22 18:42:00) [46]


> HydraMarat   (22.02.05 18:40) [8]
> Мне не нужно ИСПОЛЬЗОВАТЬ "уникальные возможности стека
> по освобождению памяти", мне надо СДЕЛАТЬ их. Для вызова
> системных функций и т.п.

Что-то орехами запахло...


Amoeba   (2005-02-22 18:41:00) [47]


> HydraMarat   (22.02.05 18:36) [7]
> Набережных С.
>
> Да уж тебе точно возразить нечего... Не понял вопроса -
> не хрен отвечать.

LMD!!!


HydraMarat   (2005-02-22 18:40:00) [48]

Мне не нужно ИСПОЛЬЗОВАТЬ "уникальные возможности стека по освобождению памяти", мне надо СДЕЛАТЬ их. Для вызова системных функций и т.п.


HydraMarat   (2005-02-22 18:36:00) [49]

Набережных С.

Да уж тебе точно возразить нечего... Не понял вопроса - не хрен отвечать.


Набережных С.   (2005-02-22 18:29:00) [50]


> HydraMarat   (22.02.05 18:08) [4]


> В-общем главное в вопросе: аналог GetMem/FreeMem для стека.

Это настолько бред, что даже возразить трудно:). В стеке переменные размещаются как раз для того, чтобы при выходе из функции не заботиться об освобождении памяти под них. Почитал бы какую-нибудь книжку про устройство компьютеров, что-ли...


Amoeba   (2005-02-22 18:20:00) [51]

А зачем, если сие не есть государственная тайна, это нужно?


HydraMarat   (2005-02-22 18:08:00) [52]

Упс, про файл проекта я загнался, процедур-то там нет, да и со "статико-динамикой" всё запутал.

В-общем главное в вопросе: аналог GetMem/FreeMem для стека. А может это как-то на asm'е делается?


Anatoly Podgoretsky   (2005-02-22 17:59:00) [53]

При том, что память будет выделена на стеке и соответствует твоему вопрос, а про статику ты ничего не говорил


HydraMarat   (2005-02-22 17:57:00) [54]

Причем здесь var? Мне нужно сделать это глобально и иметь над этим контроль. Ну представим что нужно написать частичку C-компилятора. Или Вы имеете ввиду выделить статически в файле проекта большой объем (через var) и использовать его?


Anatoly Podgoretsky   (2005-02-22 17:49:00) [55]

var внутри процедуры


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо