2

malloc定义如下:

void *malloc(size_t size);

http://pubs.opengroup.org/onlinepubs/009695399/functions/malloc.html


size_t定义(stddef.h):

size_t: Unsigned integer type of the result of the sizeof operator. http://pubs.opengroup.org/onlinepubs/009604499/basedefs/stddef.h.html


但根据this page,最大限制size_t为65535。(其他整数类型的部分限制):

size_t 的限制:SIZE_MAX 65535 http://pubs.opengroup.org/onlinepubs/007904975/basedefs/stdint.h.html


这是否意味着当我想遵守 C 标准时,我不能分配超过 65535 个字节?

4

3 回答 3

7

SIZE_MAX必须至少为 65535。如果您运行的是 MS-DOS 之类的东西,它实际上可能会那么小。在典型的、相当流行的台式计算机(例如,任何不到 10 年的计算机)上,您可以预期它会更大,通常至少约为 40 亿(更准确地说是 2 32 -1)。

您是否需要(尝试)处理更有限的系统将取决于您可能关心将代码移植到的目标范围。如果您确实可能需要在一个可寻址内存小于 1 兆字节的系统上处理 16 位编译器,那么您在编写代码时必须牢记这一点。然而,老实说,对于大多数人来说,这根本无关紧要——即使是相对较小的便携式系统(例如,iPod)也可以处理比这更多的内存。OTOH,如果您正在为唱歌贺卡编写代码,那么是的,这种限制可能伴随着领土(但在这种情况下,标准通常更多地被视为一般准则而不是绝对法律)。

于 2012-04-11T15:56:41.650 回答
3

的最小值SIZE_MAX是 65535,但它可以(并且通常是)更多。

在大多数非嵌入式平台上,size_tis a typedefforunsigned longSIZE_MAX设置为ULONG_MAX.

于 2012-04-11T15:53:39.510 回答
1

在 32 位平台上,SIZE_MAX 通常为 2^32 - 1,在 64 位平台上为 2^64 - 1。如果不确定,请检查 printf。

printf("sizeof size_t = %zx, SIZE_MAX = %zx\n", sizeof(size_t), SIZE_MAX);

包括 stdint.h 以获取 SIZE_MAX 的值。

于 2012-04-11T16:04:40.850 回答