是否有库或malloc实现,它在堆上分配内存/类似内存?

时间:2011-11-29 14:47:23

标签: c memory-management stack heap

我需要以大块的形式获取堆内存。并且这些内存块将用作内存池,并且在进程退出之前不会释放。 因此,传统的malloc可能不像我想的那么简单(也不快)。 我认为,类似堆栈的分配(LIFO)比malloc更有效。

现有的图书馆可以做到吗? 或者我应该为此目的写一个新的?

PS:我猜obstack最能说明我在说什么。关于obstack的任何其他候选人或介绍?

3 个答案:

答案 0 :(得分:1)

听取其他人的意见,首先要有效地使用malloc,但是如果你确实需要一个基于区域的分配器,可以释放大块的东西,请查看Apache Portable Runtime库。

答案 1 :(得分:0)

来自Wikipedia

  

在C中,库函数malloc用于在堆上分配一块内存。

malloc会非常简单快捷。

另外,这是什么意思?

  

我认为将堆内存分配视为堆栈的方式是可以的。

如果您的意思是想要为内存池使用堆栈空间,那么您会感到很失望。堆栈通常只有几MB(精确的大小取决于机器和?编译器)。也许你有你的堆栈和堆倒退的想法?堆栈是带有参数和局部变量的函数框架;堆是持久的动态分配内存的地方。

答案 2 :(得分:0)

malloc会在一次又一次地调用时导致减速,就像在三重嵌套循环中间一样。如果您使用malloc分配几个大块并持续很长时间,那么已经已经有效地使用malloc

例如,假设您正在处理3D点数据,并且您有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只运行一次。