int array[x][x];
我想找到x的最大值( EXACT 值,如:x = 20),可以编译而没有任何错误。 有任何想法吗? 谢谢!
更新: 我在下面发布原始问题,希望我没有误解。
通过反复试验,在以下程序中发现x的最大值,以便它仍然可以编译并运行而不会出现错误:
main(){
int array[x][x];
array[0][0] = 0;
}
打印此x值。
答案 0 :(得分:1)
系统的最大对象是SIZE_MAX
(来自stdint.h
)个字节。通过将其除以sizeof int
并取平方根,您应该能够找到最大的#34;方阵",正如我所说的那样。
使用它来表示你的x值会编译,但它是否会运行是一个不同的问题。巧合的是,它确实在ideone上运行,在那里我进行了测试......但我感觉这完全是巧合。
如果它无法运行,我会将x
除以2
并再试一次......并继续这样做,直到找到可以运行的内容。
此时,我会将x设置为最后一个失败值和成功值之间的一半,然后再试一次,冲洗,泡沫,重复......
没有太多指向这一点。这是一个毫无意义的练习,因为我们通常会尽量减少内存占用。
答案 1 :(得分:0)
it depends on a number of environment items. such as:
32 or 64 bit machine?
is there unlimited memory?
what is the default (if not changed in a linker command file) size of the stack?
is this array to be on the stack or on the heap?
experimentally, you could write a program that allocates/frees an ever expanding malloc,
until the malloc fails,
then the prior malloc sizing is the answer for your environment.
答案 2 :(得分:0)
也许不是很强烈,但是数组大小的手动二分法在十几次迭代中工作以确认我系统上的最大int
2D数组大小。使用x86_64框上的默认目标和内存模型,array[1447][1447]
是两者编译和运行的最大值。 (比我想象的要小得多,我原来的猜测是使用giga而不是mega ...)阵列消耗8,375,236
个字节的内存(为8-bytes
和{{1添加额外的i
}}):
j
#include <stdio.h>
// #define MAXA 32768
// #define MAXA 10000
// #define MAXA 1000
// #define MAXA 5000
// #define MAXA 2500
// #define MAXA 1500
// #define MAXA 1200
// #define MAXA 1350
// #define MAXA 1425
// #define MAXA 1450
// #define MAXA 1437
// #define MAXA 1443
// #define MAXA 1446
// #define MAXA 1448
#define MAXA 1447
int main ()
{
int i = 0;
int j = 0;
int a[MAXA][MAXA] = {{0}};
for (i = 0; i < MAXA; i++)
for (j = 0; j < MAXA; j++)
a[i][j] = j;
return 0;
}
:
MAXA 1448
$ ./bin/max_int_array
Segmentation fault
MAXA 1447