局部数组变量 exc 糟糕的访问分段 & 局部还是全局?
local array variable exc bad acces segmentation & local or global?
你好,我已经看到了这个最大的局部数组变量的大小,但我想知道为什么这是ok的,如果数组被设置为全局,而不是ok,如果它出现在main之后。
还有一个相关的问题:拥有在a.p中定义并在a.hpp中使用extern声明的大内存对象是一种好做法吗?或者更好地使用在本地函数中定义的大内存,但定义为vector或new或malloc,并将它们传递给函数参数。
这是我的经验,这些问题是我必须解决的…
Thank You
#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;
}
并且在函数被调用时立即分配内存——它是从堆栈中分配的。线程的堆栈内存通常初始化较低,接近1兆字节或更少。一旦堆栈内存耗尽,游戏就结束了。
正如其他人在评论中指出的那样,分配LARGE数组的正确方法是动态地使用堆内存,而堆内存通常是充足的。
int main() {
int* sd = new int[N];
...
delete [] sd; // free the allocated memory
return 0;
}
更好,这样你就不需要记住delete:
int main() {
std::vector<int> sd(N);
...
}
相关文章:
- 赋予全局变量而不是局部变量优先级的函数 - (异常行为)
- 全局和局部变量初始化与 constexpr 的差异背后的基本原理
- 使用全局变量与局部变量和require
- 将变量声明为全局变量,然后声明为局部变量 -Shadowing-
- 为什么使用 SPI 时,全局缓冲区变量产生的结果与局部缓冲区变量不同
- 将局部变量保存到全局向量中,为什么离开局部范围后可以得到这些局部变量?
- 为什么 g++ 不优化局部数组而是优化全局数组?
- 局部变量如何隐藏全局变量
- 编译器是否可以从全局变量中读取两次,而不是存储一个局部变量
- 我不知道如何让我的程序使用局部变量而不是全局变量
- 怎么可能有两个同名的变量——一个是全局变量,另一个是局部变量
- 递归计算在不使用静态局部变量,全局变量或静态函数的情况下,在递归函数中发生的环数
- C 中的全局和局部变量
- 初学者程序员 c++(局部与全局变量声明)
- 使用局部全局变量在单独的线程中运行C函数
- Arduino/C++全局变量与局部变量
- 变量类型全局、静态、局部和自动
- c和c++上下文中静态、自动、全局和局部变量之间的差异
- 编译器如何知道变量是全局变量还是局部变量(C)
- 线程局部全局作用域变量