本地数组变量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;
}
声明在全局范围:
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);
...
}
http://*.com/questions/40202324/c-vector-appear比数组快的速度 - 为什么 – user7058377
为什么矢量速度比c数组快? – user7058377
@ user7058377:容器速度不够快。个人操作缓慢或快速。而你只关心速度的时候和**,如果**你实际上已经经历过某些东西太慢了。在此之前,您使用正确的工具。 'std :: vector
当你有非常大的或未知大小的数组,你要利用堆。 – amanuel2
改为使用'std:vector'。 –
您的本地变量的例程分配在堆栈上,预计相对较小。全局变量(过分简化)分配在堆上,默认情况下这是一个更大的空间。您的变量也可以通过使用new()或malloc()使用本地例程中的堆空间进行分配,但是当函数退出时,用于引用这些变量的指针可能超出范围,从而导致内存泄漏,除非您首先使用delete()或free()取消分配内存。 – mikeTronix