159 / 147 / 59
Регистрация: 11.01.2016
Сообщений: 1,297
|
|
1 | |
Размещение структуры в памяти07.02.2017, 21:05. Показов 7534. Ответов 15
Метки нет (Все метки)
Здравствуйте.
Где-то вычитал, давно и в память отложилось, что если создаешь переменную структуры через конструктор new, то она будет расположена на куче... Интересует момент со структурой, когда создаются на кучи, а когда в стеке. Примеры бы
0
|
07.02.2017, 21:05 | |
Ответы с готовыми решениями:
15
Размещение массивов в памяти Размещение в методов памяти Размещение памяти Размещение функций в памяти |
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
|
|
07.02.2017, 21:07 | 2 |
0
|
159 / 147 / 59
Регистрация: 11.01.2016
Сообщений: 1,297
|
|
07.02.2017, 21:11 [ТС] | 3 |
TopLayer,
даже не так, а что типо если используется ключевое слово new, значит быть объекту на куче
0
|
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
|
|
07.02.2017, 21:13 | 4 |
UseMuse, наличие new ничего подобного не определяет
0
|
159 / 147 / 59
Регистрация: 11.01.2016
Сообщений: 1,297
|
|
07.02.2017, 21:16 [ТС] | 5 |
TopLayer, не подскажешь, как расположить экземпляр структуры на куче?)
0
|
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
|
|
07.02.2017, 21:20 | 6 |
UseMuse, сделать её экземплярным полем класса. Тогда, скорей всего, она окажется в куче. Но, если не ошибаюсь, информация о том, где будет расположен тот или иной программный объект в памяти, не специфицирована.
0
|
159 / 147 / 59
Регистрация: 11.01.2016
Сообщений: 1,297
|
||||||
07.02.2017, 21:30 [ТС] | 7 | |||||
TopLayer, вот сделал экземпляры структуры полями, а они судя по результату ведут себя как переменные.
0
|
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
|
|
07.02.2017, 21:34 | 8 |
0
|
159 / 147 / 59
Регистрация: 11.01.2016
Сообщений: 1,297
|
|
07.02.2017, 21:37 [ТС] | 9 |
0
|
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
|
|
07.02.2017, 21:40 | 10 |
Например то, что guids1, guids2, guids1.guidRef, guids2.guidRef размещены, скорее всего, в стеке.
0
|
159 / 147 / 59
Регистрация: 11.01.2016
Сообщений: 1,297
|
|
07.02.2017, 21:58 [ТС] | 11 |
0
|
3462 / 2473 / 695
Регистрация: 02.08.2011
Сообщений: 6,711
|
|
07.02.2017, 22:14 | 12 |
Спецификацию CLR не читал, но ребята с SO говорят, что в последних версиях CLR статические поля, поскольку они связаны с типом объекта, а не экземпляром, хранятся именно в
Type -объектах, а поскольку Type - класс, то все статические поля будут хранится в куче, назависимо от того какие они - ссылочные или значимые.Но нет строгого определения где должны храниться static - члены, главное их свойство - быть доступными на протяжении всей жизни домена приложения. То есть по факту, static члены вообще никогда не подвергаются сборке мусора, вроде как эта область, где хранятся Type-объекты, называется High Frequency Heap. Про доступность +1: Кому лень гуглить
2
|
159 / 147 / 59
Регистрация: 11.01.2016
Сообщений: 1,297
|
||||||
07.02.2017, 22:17 [ТС] | 13 | |||||
IamRain, а если не статические экземпляры структуры, а локальные, внутри метода main
0
|
3462 / 2473 / 695
Регистрация: 02.08.2011
Сообщений: 6,711
|
|
07.02.2017, 22:22 | 14 |
Если время жизни известно, то, most likely, в стеке.
0
|
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
|
||
07.02.2017, 22:26 | 15 | |
UseMuse, если вас не устраивает 'скорее всего' и 'most likely', тогда вот ещё и 'typically':
1
|
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
|
|
08.02.2017, 00:34 | 16 |
Сообщение было отмечено UseMuse как решение
Решение
Зависит от времени жизни переменной.
Если она будет использоваться недолго и компилятор может статически доказать, что время ее жизни детерминированно, то скорее всего она будет помещена в стек или в регистр. В остальных случаях — в куче. Тип значения и тип ссылки
1
|
08.02.2017, 00:34 | |
08.02.2017, 00:34 | |
Помогаю со студенческими работами здесь
16
Размещение объекта в памяти Размещение map'а в памяти Размещение в памяти данных Размещение элементов в памяти Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |