gpt4 book ai didi

c - 数组的最大索引及其在平台上的长度

转载 作者:太空宇宙 更新时间:2023-11-04 02:29:24 26 4
gpt4 key购买 nike

C中,char数组的索引范围可以从 02 ^ (sizeof(size_t) * CHAR_BITS) ,但数组成员的计数是该数字加 1,size_t 不能容纳它多变的。

例如,在x86中,如果sizeof(size_t)4 , 那么索引可以从 0 开始至 0xFFFFFFFF , 但如果数组已满,则成员数为 0xFFFFFFFF + 1 . sizeof(size_t) 不能持有.

1) 这是正确的吗?
2) 我正在考虑将最高索引限制为 0xFFFFFFFE ,有没有更好的解决办法?

我知道这个例子很极端,但我想用它作为引用。

最佳答案

对象

对象 的最大大小约为SIZE_MAXsizeof object 返回任何对象 的大小。返回的类型是 size_t 类型。 size_t 的范围是[0...SIZE_MAX]

由于对象之后的地址需要可计算,因此大小限制减一有效。

因为数组是一个对象,最大的4字节int数组应该是

int big_int_array[SIZE_MAX/sizeof(int)];  // Perhaps 1 less

分配

通过malloc()分配的最大内存约为SIZE_MAX

char *big_array = malloc(SIZE_MAX - 1);

通过calloc() 分配的最大内存约为SIZE_MAX * SIZE_MAX 字节,但如此大的分配尝试通常返回NULL.

double *big_array = calloc(SIZE_MAX/2, sizeof *big_array);

罕见的机器允许这样做,而不是 Linux。如果产品达到/超过 SIZE_MAX,大多数平台将返回 NULL

这里,big_array[] 可以被索引[0...SIZE_MAX/2)。这通常要求地址方案不是许多平台采用的传统通用线性模型。

关于c - 数组的最大索引及其在平台上的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46008164/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com