malloc
вызывает замедление, когда он вызывается снова и снова, как в середине тройного вложенного цикла. Если вы выделяете несколько больших блоков с помощью malloc
и держите их в течение длительного времени, вы уже используете malloc
эффективно.
Например, предположим, что вы работаете с трехмерными точечными данными, и у вас есть struct Point
. Если вы работали с массивом Point **
и выделяли каждой точке по отдельности, например:
for (int i = 0; i < size; ++i)
points[i] = malloc(sizeof(struct Point));
это будет медленно. Но работая с блоком struct Point
вместо struct Point *
, вы заранее определяете размер и вызываете malloc
только один раз.
points = malloc(sizeof(struct Point) * size);
Это нормально, потому что malloc
запускается только один раз.