Сколько стеков использует программа Windows? - PullRequest
1 голос
/ 12 октября 2010

Адрес возврата и данные смешиваются / хранятся в одном и том же стеке или в двух разных стеках, что имеет место?

Ответы [ 4 ]

2 голосов
/ 12 октября 2010

Как уже отмечали другие, это в основном один смешанный стек. Я просто добавлю одну небольшую деталь: достаточно недавние процессоры также имеют небольшой кэш адресов возврата, который хранится в самом процессоре, и в нем хранятся только адреса возврата, а не другие данные. Это в основном невидимо за пределами быстрого выполнения, хотя ...

2 голосов
/ 12 октября 2010

Они смешанные. Однако это зависит от реального языка программирования / компилятора. Я могу изобразить компилятор, выделяющий пространство для локальной переменной в куче и сохраняющий указатель на хранилище в стеке.

В каждом процессе по одному стеку на каждый поток. Следовательно, например, процесс с 20 потоками имеет 20 независимых стеков.

0 голосов
/ 12 октября 2010

На заметку: каждый поток в Win32 имеет свой собственный стек.Итак, когда вы говорите «программа Windows» - это зависит от того, сколько потоков у него есть.(Конечно, потоки создаются / закрываются во время выполнения).

0 голосов
/ 12 октября 2010

Это зависит от компилятора, но архитектура x86 ориентирована на один стек, поскольку инструкции push и pop работают с одним указателем стека. Компилятору придется выполнять больше работы, поддерживая более одного стека.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...