一个拷贝问题和一个栈问题
先拷贝行再拷贝列,还是先拷贝列再拷贝行
void copyij(int src[2048][2048], int dst[2048][2048])
{
int i;
int j;
for (i = 0; i < 2048; i++)
{
for (j = 0; j < 2048; j++)
{
dst[i][j] = src[i][j];
}
}
}
void copyji(int src[arraySize][arraySize], int dst[arraySize][arraySize])
{
int i;
int j;
for (j = 0; j < 2048; j++)
{
for (i = 0; i < 2048; i++)
{
dst[i][j] = src[i][j];
}
}
}
我的计算机处理器是Intel® Core™ i5-7500 CPU @ 3.40GHz,
copyij time_use is 8204.000000 us
copyji time_use is 76300.000000 us
栈的问题
int main()
{
int src[2048][2048];
int dst[2048][2048];
copyij(src, dst);
copyji(src, dst);
return 0;
}
二维数组src[2048][2048]和dst[2048][2048]直接定义在函数内部,这么定义,编译没有报错,运行程序报“段错误”。
ulimit -a
#查看栈的大小
stack size (kbytes, -s) 8192
栈区(stack segment):由编译器自动分配释放,存放函数的参数的值,局部变量的值等。
全局区(静态区)(data segment):全局变量和静态变量的存储区域是在一起的,程序结束后由系统释放。数据区的大小由系统限定,一般很大。
正确方式如下:
int src[2048][2048];
int dst[2048][2048];
int main()
{
copyij(src, dst);
copyji(src, dst);
return 0;
}