首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >避免使用malloc的方法?

避免使用malloc的方法?
EN

Stack Overflow用户
提问于 2013-01-22 20:59:23
回答 4查看 6.7K关注 0票数 19

关于最近C语言中的所有噪音,我读到有一些方法可以最大限度地减少C中malloc的使用,这是一个非常好的实践。然而,我从来都不知道这种做法是什么时候、如何或什么时候是好的。所以我的问题是,也许一些有经验的C程序员可以给出一些例子,人们可以(或者应该)在没有malloc的情况下编写一些东西,但是对于新手C程序员来说,真正不明显的方式是什么(因此说菜鸟会简单地使用malloc)?也许你有一些将malloc分解成其他东西的经验。

另外,我读到的一些帖子提到了Quake 3的源代码,以及它是如何避免使用malloc的,所以如果有人知道这一点,那么知道那里做了什么将是一件很有趣的事情,因为至少我不想漫无目的地钻研Quake代码。(因为如果他们避免使用malloc搜索malloc,我想搜索malloc不会给出太多结果,而且代码库很可能不像单个示例那样简单)

EN

回答 4

Stack Overflow用户

发布于 2013-01-22 21:01:51

在需要在局部作用域中使用小的、动态大小的数组的场景中,有从堆栈分配的alloca(),它不需要显式地释放内存(它在函数返回时释放),还有variable length arrays (VLA)

void meh(int s) {
    float *foo = alloca(s * sizeof(float));
    float frob[s];
} // note: foo and frob are freed upon returning
票数 5
EN

Stack Overflow用户

发布于 2013-01-22 21:27:05

如果你知道数组、列表、堆栈、树的所有大小,无论你的程序预先需要什么数据结构,你可以通过定义固定数量的元素数组来静态分配所需的内存。优点:没有内存管理,没有内存碎片,速度快。缺点:有限的使用,浪费内存。

您可以在malloc()或您的操作系统提供的任何东西上实现一个自定义内存分配器,只需分配一次很大的内存块,然后在不调用标准malloc()函数的情况下分割它。优点:快。缺点:实现正确并不是很容易。

另一种避免使用malloc()的方法是将大部分数据存储在文件中而不是内存中。优点:几乎没有。

如果您确定程序的堆栈足够大,您还可以使用局部变量和深层函数调用(或显式递归)为运行中的数据分配空间。优点:没有内存管理,简单,快速。缺点:有限的使用。

作为一个避免使用malloc()的中型项目的示例,我可以提供我最喜欢的项目Smaller C compiler。它静态地分配了许多数组,还在递归函数中分配了较小的局部变量。注意,代码还没有被美化,如果你是编程、C或编译器的新手,它不是小的或容易理解的东西。

票数 3
EN

Stack Overflow用户

发布于 2013-01-22 21:04:53

分配一个更大的内存块通常更快,所以我的建议是分配一个大的内存块,然后从它创建一个内存池。实现您自己的函数,将内存“释放”回池并从中分配内存。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14459135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档