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

Добрый день.

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

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

Посоветуйте, где можно поискать?
  • Вопрос задан
  • 989 просмотров
Решения вопроса 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
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы