12 / 12 / 2
Регистрация: 23.01.2013
Сообщений: 143
|
|
1 | |
Стек и куча: как все это работает?21.02.2013, 23:13. Показов 12760. Ответов 58
Метки нет (Все метки)
Добрый вечер, подскажите пожалуйста хорошую литературу (сайты) по куче и стеку. Как оно все работает?
Насколько я понял все статические переменные лежат в стеке. К примеру в программе есть несколько переменных: а, б и с. Значит где-то должен хранится адрес каждой из них? Как осуществляется доступ к переменным? Указатели (переменные) к примеру хранятся в стеке? Вообщем вопрос один где про это все толково написано? Спасибо за все хорошие источники...
2
|
21.02.2013, 23:13 | |
Ответы с готовыми решениями:
58
Статика и динамика, стек и куча - что это Как стек и куча связаны с переменными динамической и статической памятью как все это в подробностях работает? стек и куча |
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
21.02.2013, 23:27 | 3 |
Ну почему, можно сказать и статические — о существовании которых известно ещё при компиляции, как противопоставление динамическим, создающимся во время работы программы. В этом смысле всё верно.
Адреса, доступ и т. п. у всех переменных единообразные. Секция данных, стек и куча — это просто различные области памяти. Различается только способ управления распределением этой памяти — связывания этих самых адресов с переменными из программы. Написано в книжках — да в любой, затрагивающей низкий уровень не вскользь. Та же «Архитектура компьютера» Эндрю Танненбаума, не знаю...
1
|
12 / 12 / 2
Регистрация: 23.01.2013
Сообщений: 143
|
|||||||||||
21.02.2013, 23:47 [ТС] | 4 | ||||||||||
что такое автоматические переменные?
Читал что в стеке лежат локальные переменные функций, после выполнения которых они удаляются. int main() - тоже функция? Только ее переменные "живут" во время всего исполнения программы? Добавлено через 20 минут Указатель, к примеру:
Если так, то для доступа к p[i] мы должны сначала найти адрес (значение р) в стеке прибавить к нему i и только тогда получим адрес в куче где хранится значение p[i]? Тогда как при доступе к arr[i]
Это верно? Не знаю только как извлечь данные из стека....
0
|
12 / 12 / 2
Регистрация: 23.01.2013
Сообщений: 143
|
|
22.02.2013, 00:01 [ТС] | 7 |
Приведите пожалуйста пример объявления переменной внутри int main() или переданной ей, которая "не доживет" до конца работы программы?
0
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
22.02.2013, 00:03 | 8 |
Да.
Ну, в общем, верно. Тебе так же нужно знать смещение от начала массива в стеке, как в предыдущем примере. arr[] - вариант записи объявления указателя arr. И на то, как это будет работать в точности (из стека возьмется адрес, или в регистре закеширует) влияет оптимизация компилятора. В целом, логику ты угадал.
0
|
12 / 12 / 2
Регистрация: 23.01.2013
Сообщений: 143
|
|
22.02.2013, 00:14 [ТС] | 10 |
тут мне кажется влияет только область видимости переменной, при этом int i остается статической переменной
0
|
12 / 12 / 2
Регистрация: 23.01.2013
Сообщений: 143
|
|
22.02.2013, 00:21 [ТС] | 13 |
До воскресенья должен подготовить доклад о динамической , статической работой с памятью но литературы стоящей не нашел, вопрос остается открытым...
0
|
12 / 12 / 2
Регистрация: 23.01.2013
Сообщений: 143
|
|
22.02.2013, 00:24 [ТС] | 15 |
а не тоже происходит при вызове функции? при этом переменные являются статическими и хранятся в стеке?
0
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
22.02.2013, 00:34 | 20 |
1
|
22.02.2013, 00:34 | |
22.02.2013, 00:34 | |
Помогаю со студенческими работами здесь
20
Стек и куча Стек и куча Стек и куча Тип данных String. Как это все работает? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |