我对为变量分配内存感到困惑。如果是我正在创建一个大型数据结构(一个数组,一个结构,一个对象等),我正在main()的范围内初始化它,我应该创建一个局部变量
int chessBoard[8][8] = ...
还是应该在堆上分配内存?
int * chessBoard = new array[8][8];
*chessBoard = ...
重要吗?优惠吗?一个更有效/更聪明吗?我个人喜欢为更大的对象分配内存,我感觉不到堆栈框架的小。但我真的不知道。
答案 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分配的内存造成的最大错误是在完成后忘记释放它。如果您忘记释放它,可能会发生内存泄漏。