我正在尝试做家庭作业来衡量二级缓存的大小。我正在尝试使用随机整数创建并填充一个大型数组(对于缓存而言太大),然后我将以不同的步长调整并对性能进行基准测试。
我遇到的问题是当我为大数组分配内存然后开始用1到100之间的随机整数填充数组时,程序崩溃(堆栈溢出?)。
不幸的是,我对c编程很陌生。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char *argv[])
{
int buffSize = sizeof(int) * 2000000;
int * buff = (int*) malloc(buffSize);
srand(time(NULL));
for (int i = 0; i < buffSize; i++)
{
int r = rand() % 100 + 1;
buff[i] = r;
}
return 0;
}
答案 0 :(得分:4)
for (int i = 0; i < buffSize; i++)
你走得太远了。 bufsize
为2000000 * sizeof(int)
时,您只需要上升到2000000。
答案 1 :(得分:0)
您没有创建新阵列,而是根据当前体系结构的int大小分配内存块。然后,您继续将其视为一个数组,因为数组和指针的工作方式是有效的。
一旦你这样做,你开始走数组,但你已经用内存的 size 将数组的长度混为一谈。如果每个int占用4个字节,则大小为2000000 * 4
,但长度仅为2000000
。这是因为你输入的每个int占用4个字节,因此你只能将size/4
个项目放入该空间。
对于你想要的,只需创建一个数组就可以避免malloc问题,而且更明显:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char *argv[])
{
int arr_length = 2000000;
int arr[arr_length];
srand(time(NULL));
for (int i = 0; i < arr_length; i++)
{
int r = rand() % 100 + 1;
arr[i] = r;
}
return 0;
}