我可以根据C标准分配超过65535个字节吗?

Ami*_*yan 1 c malloc size-t

malloc 定义如下:

void *malloc(size_t size);
Run Code Online (Sandbox Code Playgroud)

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


但根据此页面,最大限制size_t为65535.(其他整数类型的部分限制):

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


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

Jer*_*fin 7

SIZE_MAX必须至少65535.如果你正在运行像MS-DOS这样的东西,它实际上甚至可能会那么小.在典型的,合理的当前台式计算机(例如,不到10年的任何东西)上,您可以预期它会更大,通常至少大约40亿(2 32 -1,更确切地说).

您是否需要(尝试)处理更有限的系统将取决于您可能关心移植代码的目标范围.如果你真的需要在一个系统上处理一个16位编译器,而这个系统的可寻址内存少于1兆字节,那么你必须记住你的代码.然而,老实说,对于大多数人而言,这些根本不相关 - 即使是相对较小的便携式系统(例如iPod)也可以解决远远超过此类内存的问题.OTOH,如果你正在为唱歌贺卡编写代码,那么是的,这种限制可能来自领土(但在这种情况下,标准通常被视为一般指导而非绝对法则).