什么时候对Malloc来说是一个好主意?

时间:2011-04-04 22:09:09

标签: memory variables memory-management local-variables new-operator

我对为变量分配内存感到困惑。如果是我正在创建一个大型数据结构(一个数组,一个结构,一个对象等),我正在main()的范围内初始化它,我应该创建一个局部变量

int chessBoard[8][8] = ...

还是应该在堆上分配内存?

int * chessBoard = new array[8][8];
*chessBoard = ...

重要吗?优惠吗?一个更有效/更聪明吗?我个人喜欢为更大的对象分配内存,我感觉不到堆栈框架的小。但我真的不知道。

3 个答案:

答案 0 :(得分:1)

当对象所有权需要传递很多时,使用malloc分配内存通常会更好。如果对象将在单个引用块中使用并且不会超出范围,那么局部变量肯定更好。这一切都归结为“在循环完成后你需要挂起它吗。”

如果它在你提示的main()中被定义,那么它肯定会永远有效(直到app关闭),在这种情况下,它变得更加个人偏好。许多人更喜欢局部变量,因为它们更容易阅读,并且解除引用看起来并不那么混乱。

答案 1 :(得分:1)

你应该考虑你分配的对象的大小,因为这样的代码:

int something[10000000];

会导致内存错误,但是:

int *something = new int[10000000];

会正常工作。

答案 2 :(得分:1)

使用malloc分配的动态内存的主要原因是您不知道编译时需要的最大内存量。对于棋盘,大小总是八乘八,并且数组很好。在大多数计算机上,8乘8的int数组很小。

对于名称列表,您很少知道可能遇到的最大数量,因此请使用malloc。

阵列更快一些,因为编译器会保留空间。对于malloc,有一个对库函数的运行时调用来请求内存。一旦你有了记忆,任何一种方式通常都是相同的速度。

使用指针访问malloc分配的内存比简单地使用数组要复杂一些。但是如果你想成为一名C程序员,你应该理解这两点。

对于非常大量的内存,您必须使用malloc。

由malloc分配的内存造成的最大错误是在完成后忘记释放它。如果您忘记释放它,可能会发生内存泄漏。