Если вы не используете профилировщик, о котором никто из нас не знает, куча является основной проблемой. Это потому, что большинство людей просто реагируют на то, что им говорит известный инструмент. Пожалуйста, прочитайте этот пост, чтобы увидеть, что большинство инструментов профилирования, которые указывают на статически распределенные ошибки памяти, являются обычно правильными. Профилирование должно выходить за рамки простых утечек и сборки мусора.
Позвольте мне привести вам пример на C:
#include <stdlib.h>
#include <string.h>
int main(void)
{
char *am_i_leaking;
am_i_leaking = strdup("Now, that's subjective!");
return 0;
}
Если ОС, которая запускает эту программу, не восстанавливает кучу автоматически, я вызвал проблему. Я не могу вспомнить современную ОС, которая не делает то, что на самом деле используется.
Теперь давайте посмотрим на это:
char *foo(void)
{
static char bar[1024];
memset(bar, 0, sizeof(bar));
snprintf(bar, sizeof(bar -1), "Do wa diddy diddy dum diddy do");
return bar;
}
Как ваш компилятор распределяет это, ну, в общем, зависит от вашего компилятора. Если вы используете его и можете возиться с результатом, возможно, у вас сломан компилятор. Тем не менее, если в эту функцию одновременно входит 100 потоков, то результат, несомненно, будет мусором, если только мой компилятор не поймет, что я имел в виду , и не введет взаимное исключение или динамическое распределение, и мне не придется об этом беспокоиться, с этого момента мы возвращаемся к куче профилирования.
Короче говоря, при нашей жизни сборка мусора относится к куче. Рассчитывайте на то, что в будущем вам удастся сделать укол в стек и попытаться «оптимизировать» вещи, а затем рассчитывать на то, что эти усилия превратятся в интерпретируемый язык, который потребует куча руководителей.
Это не означает, что игнорирование памяти ошибки - это хорошо, независимо от того, что происходит с хранилищем.