【发布时间】:2017-03-04 22:43:04
【问题描述】:
您好,我已经看到了这个Maximum size of local array variable,但我想知道为什么如果数组设置为 ion global 就可以,而如果它在 main 之后就不行。
还有一个相关的问题: 拥有在 a.cpp 中定义并在 a.hpp 中使用 extern 声明的大内存对象是一种好习惯吗?或者更好地使用在本地函数中定义但定义为向量、新或 malloc 并将它们传递到函数参数中的大内存。
根据我的经验,这些问题是我必须解决的......
谢谢
#include <iostream>
using namespace std;
#define N (10000000000000)
int sd[N];
int main() {
// int sd[N];
return 0;
}
【问题讨论】:
-
当你有非常大或未知大小的数组时,你想利用堆。
-
改用
std:vector<int>。 -
你的例程的局部变量是在栈上分配的,预计会比较小。全局变量(过度简化)分配在堆上,默认情况下这是一个更大的空间。您的变量也可以通过使用 new() 或 malloc() 使用本地例程中的堆空间分配,但是用于引用这些变量的指针可能会在函数退出时超出范围,从而导致内存泄漏,除非您首先使用 delete() 或 free() 取消分配内存。
-
所以如果喜欢在 main() 中使用 int *t=new in[10000000000000],就像我理解的那样,当函数退出时,t 可能会指向另一个区域内存(f (int *t,size_t s))。为了确保不会出现问题,将 int * const t=new in[10000000000000] 与 f(int * const t,size_t s) 一起使用将是 100% 稳健的?
-
更正:所以如果更喜欢使用 static int *t=new in[10000000000000] ...(使用静态没关系)