Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/40: Рейтинг темы: голосов - 40, средняя оценка - 4.83
 Аватар для UseMuse
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,325

Размещение структуры в памяти

07.02.2017, 21:05. Показов 8186. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Где-то вычитал, давно и в память отложилось, что если создаешь переменную структуры через конструктор new, то она будет расположена на куче...
Интересует момент со структурой, когда создаются на кучи, а когда в стеке. Примеры бы
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.02.2017, 21:05
Ответы с готовыми решениями:

Размещение массивов в памяти
Доброе время суток! Получается, что многомерные массивы(не вложенные) хранятся в managed памяти линейно ? Фактически, подобно статическим...

Размещение в методов памяти
Наверно, сумбурный несколько вопрос, но хотел бы прояснить. Узнал что в javascript при конструировании методы "объекта"...

Размещение памяти
Здравствуйте, есть 16 gb памяти, что будет быстрее работать, 2 планки по 8gb двухканальный режим, либо 4 планки по 4 gb тоже каждая пара...

15
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
07.02.2017, 21:07
Цитата Сообщение от UseMuse Посмотреть сообщение
Где-то вычитал,
это про с++
0
 Аватар для UseMuse
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,325
07.02.2017, 21:11  [ТС]
TopLayer,
Цитата Сообщение от UseMuse Посмотреть сообщение
что если создаешь переменную структуры через конструктор new
даже не так, а что типо если используется ключевое слово new, значит быть объекту на куче
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
07.02.2017, 21:13
UseMuse, наличие new ничего подобного не определяет
0
 Аватар для UseMuse
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,325
07.02.2017, 21:16  [ТС]
TopLayer, не подскажешь, как расположить экземпляр структуры на куче?)
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
07.02.2017, 21:20
UseMuse, сделать её экземплярным полем класса. Тогда, скорей всего, она окажется в куче. Но, если не ошибаюсь, информация о том, где будет расположен тот или иной программный объект в памяти, не специфицирована.
0
 Аватар для UseMuse
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,325
07.02.2017, 21:30  [ТС]
TopLayer, вот сделал экземпляры структуры полями, а они судя по результату ведут себя как переменные.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using System;
 
namespace ConsoleApplication1
{
    struct Guids
    {
        public Guid guidRef { get; set; }
        public Guids(string str = null)
        {
            guidRef = Guid.NewGuid();
        }
    }
    class Program
    {
        static Guids guids1 = new Guids("");
        static Guids guids2 = new Guids("");
        static void Main(string[] args)
        {
            Console.WriteLine("Начальные данные");
            Console.WriteLine("guids1: {0}", guids1.guidRef);
            Console.WriteLine("guids2: {0}", guids2.guidRef);
            Console.WriteLine("guids1 = guids2");
            guids1 = guids2;
 
            Console.WriteLine("Присвоили новый гуид guids2");
            guids2.guidRef = Guid.NewGuid();
            Console.WriteLine("Результат");
            Console.WriteLine("guids1: {0}", guids1.guidRef);
            Console.WriteLine("guids2: {0}", guids2.guidRef);
 
        }
    }
}
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
07.02.2017, 21:34
Цитата Сообщение от UseMuse Посмотреть сообщение
а они судя по результату ведут себя как переменные
это не имеет никакого отношения к теме
0
 Аватар для UseMuse
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,325
07.02.2017, 21:37  [ТС]
Цитата Сообщение от TopLayer Посмотреть сообщение
это не имеет никакого отношения к теме
а что имеет?)
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
07.02.2017, 21:40
Цитата Сообщение от UseMuse Посмотреть сообщение
а что имеет?)
Например то, что guids1, guids2, guids1.guidRef, guids2.guidRef размещены, скорее всего, в стеке.
0
 Аватар для UseMuse
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,325
07.02.2017, 21:58  [ТС]
спасибо конечно, но
Цитата Сообщение от TopLayer Посмотреть сообщение
скорее всего
в качестве ответа меня не устраивает, жду еще варианты
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,231
07.02.2017, 22:14
Спецификацию CLR не читал, но ребята с SO говорят, что в последних версиях CLR статические поля, поскольку они связаны с типом объекта, а не экземпляром, хранятся именно в Type-объектах, а поскольку Type - класс, то все статические поля будут хранится в куче, назависимо от того какие они - ссылочные или значимые.
Но нет строгого определения где должны храниться static - члены, главное их свойство - быть доступными на протяжении всей жизни домена приложения. То есть по факту, static члены вообще никогда не подвергаются сборке мусора, вроде как эта область, где хранятся Type-объекты, называется High Frequency Heap.
Про доступность
Static is just for the lifetime - yes. It doesn't say anything about when or where it is stored - just that it's available when you asked for it. A compliant runtime is free to use whatever memory it wants, or even never to load the fields in memory (e.g. keeping it in the image, which is already in memory anyway)
Оттуда же,
That's pretty much it. Everything else is an implementation detail - the specification doesn't care about stack, heap or anything else. It's up to the implementation of the runtime, and a valid runtime could put everything on the stack, if it so desired, or on the heap. And don't forget registers.
Добавлено через 3 минуты
+1: Кому лень гуглить
2
 Аватар для UseMuse
154 / 154 / 60
Регистрация: 11.01.2016
Сообщений: 1,325
07.02.2017, 22:17  [ТС]
IamRain, а если не статические экземпляры структуры, а локальные, внутри метода main
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
using System;
 
namespace ConsoleApplication1
{
    struct Guids
    {
        public Guid guidRef { get; set; }
        public Guids(string str = null)
        {
            guidRef = Guid.NewGuid();
        }
    }
    class Program
    {
 
        static void Main(string[] args)
        {
            Guids guids1 = new Guids("");
            Guids guids2 = new Guids("");
            Console.WriteLine("Начальные данные");
            Console.WriteLine("guids1: {0}", guids1.guidRef);
            Console.WriteLine("guids2: {0}", guids2.guidRef);
            Console.WriteLine("guids1 = guids2");
            guids1 = guids2;
 
            Console.WriteLine("Присвоили новый гуид guids2");
            guids2.guidRef = Guid.NewGuid();
            Console.WriteLine("Результат");
            Console.WriteLine("guids1: {0}", guids1.guidRef);
            Console.WriteLine("guids2: {0}", guids2.guidRef);
 
        }
    }
}
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,231
07.02.2017, 22:22
Если время жизни известно, то, most likely, в стеке.
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
07.02.2017, 22:26
UseMuse, если вас не устраивает 'скорее всего' и 'most likely', тогда вот ещё и 'typically':
C# 6.0 Language SpecificationInstead of dynamically allocating an object and returning a reference to it, a struct constructor simply returns the struct value itself (typically in a temporary location on the stack), and this value is then copied as necessary.
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
08.02.2017, 00:34
Лучший ответ Сообщение было отмечено UseMuse как решение

Решение

Цитата Сообщение от UseMuse Посмотреть сообщение
Интересует момент со структурой, когда создаются на кучи, а когда в стеке.
Зависит от времени жизни переменной.
Если она будет использоваться недолго и компилятор может статически доказать, что время ее жизни детерминированно, то скорее всего она будет помещена в стек или в регистр.
В остальных случаях — в куче.

Тип значения и тип ссылки
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.02.2017, 00:34
Помогаю со студенческими работами здесь

Размещение функций в памяти
Помогите бедному-зеленому кое-что устаканить в своей голове! Давно тревожит один вопрос: "как расположены функции в...

Размещение объекта в памяти
Возможно ли размещение объекта в заранее выделенной памяти, например в массиве? Тоесть не просто скопировать, а так чтобы создание...

Размещение map'а в памяти
Элементы вектора гарантировано размещаются в памяти рядом, в случае списка элементы лежат где попало, но для этого есть прямые и обратные...

Размещение в памяти данных
Подскажите отличия,если я читаю данные(вещественные числа) с бинарного файла поэлементно и к примеру если я читаю те же самые данные из...

Размещение элементов в памяти
Добрый день! Подскажите. может ли контейнер STL vector хранить значения типа char (wchar_t)? Если нет, то подскажите, как создать некую...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru