Учебный материал по работе с памятью?

Добрый день.

Всегда писал на языках, использующих сборщик мусора. Естественно никогда не парился по поводу работы с памятью. А вот недавно начал ковырять Rust и понял, что этот пробел в знаниях мне сильно мешает. Я не знаю, когда будет правильно выделять память в куче, а когда в стеке. Как следить за ней и как правильно работать с указателями/ссылками.

Хочу восполнить этот пробел, но не знаю где искать материал. Понятно что прям книг по этой теме не будет, но хочется найти какие-нибудь статьи, что бы обстоятельно разобраться с вопросом.

Посоветуйте, где можно поискать?
  • Вопрос задан
  • 925 просмотров
Решения вопроса 2
Rou1997
@Rou1997
Начните сперва с C++ как с более распространенного языка.

Как следить за ней

Чтобы работало, и утечек памяти не было, то есть более не нужные данные не занимали память.

как правильно работать с указателями/ссылками

Очищать всю динамически выделенную память, когда уже не нужна, грубо говоря, на каждый new должен быть delete, если только приложение не завершается сразу же, тогда вся память очищается..

Всегда писал на языках, использующих сборщик мусора. Естественно никогда не парился по поводу работы с памятью.

В них тоже бывают утечки памяти, но это частные случаи, например, при многопоточности.
Ответ написан
Сначала посмотрите это видео(лучше вряд ли найдёте).
По работе с указателями/ссылками -- Герберт Шилдт, Базовый курс C++. Начиная с 6 или 7-ой главы в этой книге применяются указатели и ссылки и рассказывается, что это такое (почитайте с 6-ой главы(или 7, когда уж там начинается тема указателей) ещё парочку глав, автор начнёт в своих программах использовать указатели, поразбирайте код, который там представлен и сможете их правильно использовать). Очень всё понятно.
Это для закрепления
И это
И это
И это
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@potan
По возможности, выделяйте на стеке. Выделять в куче то, что можно выделить на стеке стоит если приложение сильно многопоточное, не 64-битное или используется без MMU.
Если не получается выделить на стеке (Rust об этом сообщит ошибками во владении), то выделяйте в куче.

На C++ лучше не смотрите - там слишком много сложностей.
Ответ написан
EvilsInterrupt
@EvilsInterrupt
System programming, Reversing Engineering, C++
Вот вам вопросы, который помогут принять решение как работать с объектом.
1. Когда известно какого размера объект? Во время компиляции или во время выполнения?
2. Насколько большой по размеру объект? Стек имеет не слишком большую память и все не реально большое нужно или держать в памяти или работать с файлом на диске

Чтобы дать ответ на второй вопрос нужно знать вашего пользователя. Абсолютно для всех никогда не получится написать код. Поэтому нужно знать в каких именно условиях будет работать ваш код.
Ответ написан
@SolidMinus
Некропост с длиной в неделю, но предлагаю на C++ использовать unique_prt, share_ptr, make-функции и контейнер std::vector и не париться по поводу очистки и выделения памяти. Звучит страшно, но на самом деле изи

С++ без new и delete
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
FunBox Санкт-Петербург
от 120 000 ₽
FunBox Томск
от 120 000 ₽
FunBox Екатеринбург
от 120 000 ₽