jenya7 0 14 ноября, 2022 Опубликовано 14 ноября, 2022 (изменено) · Жалоба Интересует реализицая в C#, Qt и им подобным. Скажем лист List<MyObject> objects; Он как реализован? Как связанный список? А если я добавил объект в список, потом другой процесс выделил память, потом добавил ещё объект, что получиться? objects 1-й объект Кусок памяти другого процесса. objects 2-й объект Теперь стринг string str; //тут он вернул «ааааа» str = GetString(); //тут он вернул «бб» str = GetString(); str вряд ли указатель в данном случае. Динамическое выделение? А во втором случае – переопределение? Изменено 14 ноября, 2022 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 2 14 ноября, 2022 Опубликовано 14 ноября, 2022 · Жалоба я погуглил про c# https://habr.com/ru/company/pvs-studio/blog/691476/ Под капотом List<T> построен с использованием массива. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 14 ноября, 2022 Опубликовано 14 ноября, 2022 · Жалоба 17 minutes ago, jenya7 said: Динамическое выделение? Да Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 14 ноября, 2022 Опубликовано 14 ноября, 2022 (изменено) · Жалоба On 11/14/2022 at 9:14 AM, Lmx2315 said: я погуглил про c# https://habr.com/ru/company/pvs-studio/blog/691476/ Под капотом List<T> построен с использованием массива. мне эти AddWithResize(item); Grow(size + 1); непонятны. где место Зин? смежный кусок памяти уже занят, кто то его занял. On 11/14/2022 at 9:19 AM, Forger said: Да во втором случае "бб" переопределение? а если в третьем случае вернули длинную строку а места нет? Изменено 14 ноября, 2022 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 2 14 ноября, 2022 Опубликовано 14 ноября, 2022 · Жалоба 9 минут назад, jenya7 сказал: мне эти AddWithResize(item); Grow(size + 1); непонятны. где место Зин? смежный кусок памяти уже занят, кто то его занял. Какой смежный? CLR увеличивает размер массива в том куске памяти где есть требуемый объём и всё туда заново копирует. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 14 ноября, 2022 Опубликовано 14 ноября, 2022 · Жалоба On 11/14/2022 at 9:47 AM, Lmx2315 said: Какой смежный? CLR увеличивает размер массива в том куске памяти где есть требуемый объём и всё туда заново копирует. а то место откуда копирует - там дырка остаётся? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 2 14 ноября, 2022 Опубликовано 14 ноября, 2022 · Жалоба 1 минуту назад, jenya7 сказал: а то место откуда копирует - там дырка остаётся? Дырка, пока сборщик мусора её не приберёт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 14 ноября, 2022 Опубликовано 14 ноября, 2022 · Жалоба On 11/14/2022 at 9:53 AM, Lmx2315 said: Дырка, пока сборщик мусора её не приберёт. а что сборщик мусора может сделать? перераспределит память более оптимально? а если где то инициализирован указатель на данный адрес памяти, он и указатель поменяет на новый адрес? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 2 14 ноября, 2022 Опубликовано 14 ноября, 2022 · Жалоба 4 минуты назад, jenya7 сказал: а что сборщик мусора может сделать? перераспределит память более оптимально? а если где то инициализирован указатель на данный адрес памяти, он и указатель поменяет на новый адрес? Что он делает с памятью насчёт оптимальности я не знаю, а вот ссылки поправит, указатели там только в "небезопасном режиме" и они конечно испортятся. Хотя мы уходим туда где я всё менее компетентен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 14 ноября, 2022 Опубликовано 14 ноября, 2022 · Жалоба On 11/14/2022 at 10:00 AM, Lmx2315 said: Что он делает с памятью насчёт оптимальности я не знаю, а вот ссылки поправит, указатели там только в "небезопасном режиме" и они конечно испортятся. Хотя мы уходим туда где я всё менее компетентен. я подумываю в микроконтролерных проектах использовать динамическое выделение памяти более активно. вот хотел узнать как они разруливают все эти ситуации, может есть какие отхваты которыми можно воспользоваться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 2 14 ноября, 2022 Опубликовано 14 ноября, 2022 · Жалоба 6 минут назад, jenya7 сказал: я подумываю в микроконтролерных проектах использовать динамическое выделение памяти более активно. вот хотел узнать как они разруливают все эти ситуации, может есть какие отхваты которыми можно воспользоваться. Я думаю что чудес не бывает, надо выделять память, возвращать обратно, следить за состоянием и дефрагментировать время от времени. А вообще - тот кто хочет надёжности выделяет память статически. Кстати, про c# он когда ему надо выделить новую память под list, он новую память выделяет вдове больше чем была, даже если надо увеличить на +1, это как стратегия минимизации издержек. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 14 ноября, 2022 Опубликовано 14 ноября, 2022 (изменено) · Жалоба On 11/14/2022 at 10:09 AM, Lmx2315 said: Я думаю что чудес не бывает, надо выделять память, возвращать обратно, следить за состоянием и дефрагментировать время от времени. А вообще - тот кто хочет надёжности выделяет память статически. Кстати, про c# он когда ему надо выделить новую память под list, он новую память выделяет вдове больше чем была, даже если надо увеличить на +1, это как стратегия минимизации издержек. да уж, выделять статически. я сейчас упёрся в проблемку, есть парсер пользовательского скрипта, который "компилируется" в массив выражений. массив статический но я не знаю какой скрипт напишет пользователь и сколько памяти выделить статически. завтра у пользователя разыграется фантазия и он переполнит мой статический массив. я перешёл на одноплатник, там конечно полёт души. но другая проблема - у одноплатника нету всей микроконтроллерной периферии, коротка кольчужка. Изменено 14 ноября, 2022 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 14 ноября, 2022 Опубликовано 14 ноября, 2022 · Жалоба 32 minutes ago, jenya7 said: я подумываю в микроконтролерных проектах использовать динамическое выделение памяти более активно. вот хотел узнать как они разруливают все эти ситуации STL в мк с ее активным использованием кучи вряд ли будет уместно. Да и сборщика мусора тут никакого нет. Альтернативные реализации кучи возможны, но это только для спецов, кто знает что делает. 9 minutes ago, jenya7 said: завтра у пользователя разыграется фантазия и он переполнит мой статический массив. Если массив создается на этапе запуска МК и под него выделяется память один раз, то ничего страшного в динамическом создании массива нет. Но нужно мониторить все нештатные ситуации с дин памятью, т.е. опять-таки требуется некоторый опыт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 14 ноября, 2022 Опубликовано 14 ноября, 2022 · Жалоба On 11/14/2022 at 10:37 AM, Forger said: STL в мк с ее активным использованием кучи вряд ли будет уместно. Да и сборщика мусора тут никакого нет. Альтернативные реализации кучи возможны, но это только для спецов, кто знает что делает. Если массив создается на этапе запуска МК и под него выделяется память один раз, то ничего страшного в динамическом создании массива нет. Но нужно мониторить все нештатные ситуации с дин памятью, т.е. опять-таки требуется некоторый опыт. не так завтра пользователь напишет другой скрипт. скрипт то не статический. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 14 ноября, 2022 Опубликовано 14 ноября, 2022 · Жалоба 28 minutes ago, jenya7 said: не так завтра пользователь напишет другой скрипт. скрипт то не статический. Читайте внимательнее: 36 minutes ago, Forger said: Если массив создается на этапе запуска МК и под него выделяется память один раз, то ничего страшного в динамическом создании массива нет. Вот например в одном из своих проектов загружаю json файл с настройками, выделяя под него память динамически, по размеру файла. После рестарта МК все по новой. Но выделение таких больших кусков использую однократно при старте. Но и у куча у меня другая, нештатная, на базе TLSF Разумеется, есть контроль за размерами и пр. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться