大小为 1 MB 的数组
array of size 1 MB
#include<iostream>
#include <intrin.h>
using namespace std;
unsigned __int64 TimeValue=0;
unsigned __int64 rdtsc(void)
{
return __rdtsc();
};
void time_start() { TimeValue=rdtsc(); }
long long time_stop() {
return (rdtsc()-TimeValue);
}
int main()
{
long x[262144],i,k,r;
int j;
x[0] = 0;
for (i=1; i<262144; i++)
{
long r = rand()%i;
x[i] = x[r];
x[r] = i;
}
time_start();
for (j=0; j<1000; j++)
for (k=0, i=0; i<262144; i++)
k = x[k];
cout<<time_stop()/1000/262144;
}
在程序中,我需要创建一个 1 兆字节的数组大小。在行 long x [262144]
上调试程序时,会发生错误:在"dgdxgdrfy.exe"中出现未处理的异常"0x00ff1997":0xC00000FD:堆栈溢出。为什么会这样以及如何解决它?
尝试将其声明为全局变量 - 在 main
方法(( 之外。否则,它将被分配到远小于堆的堆栈上。另一种解决方案是将动态分配与 new
一起使用,但这更容易出错。
局部变量在堆栈上分配,但堆栈是有限的。您可以通过编译器上的开关来增加限制。
问题在于您声明的非常大的数组。一个简单的修复将它从堆栈上更改为动态分配:
std::vector<long> x(262144);
发生这种情况是因为在堆栈上分配了本地数组。您可以通过使用动态数组(使用 new 创建的数组(、向量或在全局范围内声明数组来避免这种情况。
您可以使用static long x[262144]
;它确实将分配移动到堆栈之外,并且您根本不会修改代码。
基本上,您应该动态分配 x 数组,如本文所示。下面的示例是从文本中提取的,如果您将其更改为适合您的情况,它应该可以正常工作。
double *num;
num = (double *) malloc (BUFSZ* sizeof(double))
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '