本地数组变量exc坏acces分段&本地或全局?

问题描述:

你好,我已经看到了这个Maximum size of local array variable,但我想知道为什么这是好的,如果数组设置离子全局和不好,如果它后面的主。本地数组变量exc坏acces分段&本地或全局?

而关系中的另一个问题: 在a.cpp中定义大的内存对象并使用extern在a.hpp中声明是否是一种很好的做法?或者更好地处理在本地函数中定义的大内存,但定义为vector或new或malloc并将它们传递给函数参数。

这是看我的经验,是这些问题,我必须解决......

谢谢

#include <iostream> 
using namespace std; 

#define N (10000000000000) 
int sd[N]; 

int main() { 
    // int sd[N]; 
    return 0; 
} 
+0

当你有非常大的或未知大小的数组,你要利用堆。 – amanuel2

+2

改为使用'std:vector '。 –

+0

您的本地变量的例程分配在堆栈上,预计相对较小。全局变量(过分简化)分配在堆上,默认情况下这是一个更大的空间。您的变量也可以通过使用new()或malloc()使用本地例程中的堆空间进行分配,但是当函数退出时,用于引用这些变量的指针可能超出范围,从而导致内存泄漏,除非您首先使用delete()或free()取消分配内存。 – mikeTronix

声明在全局范围:

int sd[N]; 

int main() { 
    return 0; 
} 

产生的二进制只是得到真正的大。当进程中加载​​到内存中,全局内存整个数据集的映射

声明的函数中:

int main() { 
    int sd[N]; 
    return 0; 
} 

而作为调用的内存一旦分配的功能 - 这是。从堆栈分配。线程的堆栈内存通常初始化为低,接近兆字节或更低。一旦堆栈内存用完,游戏就结束了。

正如其他人在评论中指出的那样,分配大数组的正确方法是动态使用堆内存,这通常很丰富。

int main() { 
    int* sd = new int[N]; 

    ... 

    delete [] sd; // free the allocated memory 
    return 0; 
} 

更妙的是,这样你就不必记住删除:

int main() { 
    std::vector<int> sd(N); 

    ... 

} 
+0

http://*.com/questions/40202324/c-vector-appear比数组快的速度 - 为什么 – user7058377

+0

为什么矢量速度比c数组快? – user7058377

+0

@ user7058377:容器速度不够快。个人操作缓慢或快速。而你只关心速度的时候和**,如果**你实际上已经经历过某些东西太慢了。在此之前,您使用正确的工具。 'std :: vector '肯定是这里的正确工具。 –