56 / 52 / 21
Регистрация: 01.01.2012
Сообщений: 347
|
||||||
1 | ||||||
В какой области памяти лежат объекты?11.09.2017, 22:03. Показов 5950. Ответов 61
Метки нет (Все метки)
Здрст.
Вопрос: а где лежит объект-член 'a'? (в куче или в стеке) и с помощью какого средства можно это проверить?
0
|
11.09.2017, 22:03 | |
Ответы с готовыми решениями:
61
В какой области памяти хранится указатель (сама переменная, которая хранит адрес)? Вопрпос про const: в какой области памяти они находятся, и где это объявлять ? Считается ли хорошим тоном создавать объекты классов в области глобальных переменных Перераспределение памяти с new под объекты |
Модератор
8950 / 6716 / 921
Регистрация: 14.02.2011
Сообщений: 23,706
|
|
12.09.2017, 21:26 | 21 |
не факт
в последнее время очень плотно сижу с микроконтроллерами а там с памятью напряженка, а вот регистров очень многотак что локальные переменные очень часто запихиваются в регистр причем может запихать в регистр который до этого использовала другая переменная вполне возможен вариант когда область видимости равна "выделению памяти"
2
|
Неэпический
|
|||||||||||||||||||||||||||||||
12.09.2017, 21:44 | 22 | ||||||||||||||||||||||||||||||
hoggy, время жизни объекта у нас начинается когда?
Затем всё выделение на стеке сводится к работе с регистрами. Если компилятор может посчитать сколько необходимо памяти и выделить её на стеке одним махом, то почему нет? Если же компилятор не может этого посчитать? Проще всего такое продемонстрировать на C, либо на C++ с VLA от GCC:
А возьмем такой код:
GCC вообще разбил функцию на две и построил подобный код:
0
|
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
12.09.2017, 21:47 | 23 |
нет, факт.
монопенисуальный фактор. не принципиальный момент. принципиально, что вся память под статические/автоматические объекты резервируется на этапе компиляции. на этапе исполнения происходит инициализация объектов. память же под эти объекты выделяется на этапе запуска процесса. Добавлено через 1 минуту не о женских разумеется. а о тех, что случаются в момент запуска процесса, я думаю.
0
|
Неэпический
|
||||||
12.09.2017, 21:57 | 24 | |||||
Это естественно. Только речь о автоматических объектах.
Двигаем указатель, получаем выделение на стеке. Память же под стек, и, как следствие, все автоматические объекты выделяется при старте процесса/потока. Другое дело, когда будут двигаться эти самые "указатели".
а могут просто просто превратиться число для bss. Добавлено через 7 минут
1
|
Notoriously
|
12.09.2017, 22:12
#25
|
Не по теме: Croessmah,
0
|
Croessmah
|
12.09.2017, 22:17
#26
|
Не по теме: Notoriously, я и не спорю. Просто примерчик того, где не всё резервируется при заходе в блок. :)
0
|
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
12.09.2017, 22:17 | 27 |
а это уже совсем другой вопрос.
к выделениям
0
|
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
12.09.2017, 22:30 | 29 |
ни под какие "места для переменных" ничего специально не резервируется.
при запуске процесса ось выделяет ему некоторый кусок под стек. на этом все и заканчивается. компилятор рассчитал, сколько байт нужно выделить под фрейм функции. и насколько нужно двигать указатель стека. если не хватит - получим переполнение стека. то есть, можно сказать, что компилятор резервирует память под все объекты фрейма функции. но он резервирует стековую память, выделением которой он строго говоря не занимается.
1
|
Неэпический
|
|
12.09.2017, 22:56 | 30 |
Ы-ы-ы. О чем писали все газеты.
Что, тоже не удалось подобрать более подходящего термина? В коде выше видим, что это не всегда так. Резервирование может происходить "по месту".
1
|
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
12.09.2017, 23:19 | 31 |
газета началась с вопроса: когда создаются объекты.
на этапе загрузки процесса создаются объекты. объект - кусок памяти(ц)Страуструп. не над вырывать из контекста: компилятор на этапе компиляции колбасит стек на фреймы, так, что бы размера фрейма гарантированно хватило под все его объекты. а уж хватит ли самого стека... Кликните здесь для просмотра всего текста
https://youtu.be/uXrKiuG-ybI
в коде выше мы видим простейшую логику здравого смысла: есть два объекта: 1 кг и 100 кг. но жить одновременно они не могут. следовательно, нет ни одной причины выделять под фрейм 101кг. 100кг хватит на все.
1
|
Неэпический
|
||||||
12.09.2017, 23:38 | 32 | |||||
An object is a region of storage. (c) ISO/IEC 14882
И код выше (первом) совершенно не об этом.
0
|
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
12.09.2017, 23:44 | 33 | |||||
И?
Он строго говоря и не обязан умничать. Так то я бы не удивился, если бы он догадался подсократить майн до
0
|
Велосипедист...
353 / 220 / 73
Регистрация: 15.12.2015
Сообщений: 785
|
|
13.09.2017, 11:25 | 35 |
_stanislav, задам встречный вопрос, который должен стать ответом на Ваш вопрос: в левом кармане может быть правый карман?
Добавлено через 12 минут Странный однако вопрос. Помнится, Вы писали неплохой код, посмотрев на него и на Ваш код, чувствуется какой-то подвох. Или код писали не Вы?
0
|
Велосипедист...
353 / 220 / 73
Регистрация: 15.12.2015
Сообщений: 785
|
|
13.09.2017, 13:13 | 37 |
Не по теме: Croessmah, =-O Добавлено через 2 минуты
0
|
Неэпический
|
|
13.09.2017, 13:13 | 38 |
Достаточно известный.
Дырки в карманах в подкладку, положил что-то в правый карман, вытащил потом из левого. Места больше, хотя использовать неудобно. Причем здесь стек? Мы о карманах же.
0
|
Велосипедист...
353 / 220 / 73
Регистрация: 15.12.2015
Сообщений: 785
|
|
13.09.2017, 13:16 | 39 |
Я думал, Вы это косвенно про "стек в куче" сказали)) Так уж и быть, сравнение с карманами вышло не очень.
0
|
"C with Classes"
|
|
13.09.2017, 19:58 | 40 |
я имел ввиду, как реализовано хранение данных в самой куче.
код писал я, причем быстро в лоб, особо не задумываясь, поэтому считаю годным только для примера.
0
|
13.09.2017, 19:58 | |
13.09.2017, 19:58 | |
Помогаю со студенческими работами здесь
40
Объекты классов в динамической памяти Выделение памяти под объекты классов Динамическое выделение памяти под объекты Создать указатели и ссылки на объекты в памяти Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |