C中静态分配数组大小的限制

C中静态分配数组大小的限制,c,arrays,memory,architecture,C,Arrays,Memory,Architecture,在C语言中,这是一个与内存分配相关的问题。我有一个(比如说5个)二维浮点数数组。每个阵列为60x60 理论上,此信息表示初始计算后不会更改的静态数据 这应该存储为静态大小的数组,还是足够大以便动态分配?我想我不清楚堆栈的大小,也不清楚诸如arr[60][60]之类的声明是否将专门存储在DATA部分。这取决于机器还是代码本身?由于堆栈内存通常对应于高级缓存,那么在英特尔i5系列机器上,它的大小限制是多少 我知道这是一个非常广泛的问题,所以我很乐意参考可靠的背景资料。那么它是5乘以60乘以60乘以4

在C语言中,这是一个与内存分配相关的问题。我有一个(比如说5个)二维浮点数数组。每个阵列为60x60

理论上,此信息表示初始计算后不会更改的静态数据

这应该存储为静态大小的数组,还是足够大以便动态分配?我想我不清楚堆栈的大小,也不清楚诸如
arr[60][60]
之类的声明是否将专门存储在
DATA
部分。这取决于机器还是代码本身?由于堆栈内存通常对应于高级缓存,那么在英特尔i5系列机器上,它的大小限制是多少


我知道这是一个非常广泛的问题,所以我很乐意参考可靠的背景资料。

那么它是5乘以60乘以60乘以4(float的大小)?只有72000字节。小到足以将其声明为“静态”编译时数组/矩阵,即使在非常小的嵌入式系统中也是如此。如果你在一台普通的PC(Windows、Linux、OSX)上,那么堆栈至少是一兆字节,可能高达8MB,所以也没有问题。此外,在一台合理的现代计算机上(即过去六、七年左右的计算机),72000字节的复制速度仍然足够快,您不会注意到它。

我是否应该担心以后将这些数据“移动”到堆上?对于线性代数函数
你喜欢数学(浮点*输入)
?在这种情况下是否会发生任何实际的移动或复制?@Manbroski首先要记住的是,所有数组在传递给函数时都会衰减为指针,因此实际上不会复制实际数据。因此,在
main
中将其声明为局部变量,然后将其传递将不会在空间或执行时间方面造成太多问题。谢谢。我应该记得的+1感谢你没有告诉我RTFM。@Manbroski但你应该做的是做一些测试并对它们进行基准测试,看看性能(执行时间和存储)是否可以接受。