我试着写了以下内容:
#include <stdint.h>
#include <stdlib.h>
void *ptr = malloc(SIZE_MAX);
但是编译器给了我以下警告:
warning: argument 1 value ‘18446744073709551615’ exceeds maximum object
size 9223372036854775807 [-Walloc-size-larger-than=]
这听起来很有道理。但无论如何,我想在当前实现/arch 上分配一个最大可能大小的对象。 Annex.B(19)
中定义了宏RSIZE_MAX
:
__STDC_WANT_LIB_EXT1__
RSIZE_MAX
所以我尝试了以下 example :
#define __STDC_WANT_LIB_EXT1__
#include <stdint.h>
#include <stdlib.h>
int main(){
void *ptr = malloc(RSIZE_MAX);
}
但是没有效果,RSIZE_MAX
没有定义。如何使用此宏或任何其他方式在编译时验证最大对象大小?
最佳答案
定义SIZE_MAX
定义数据类型size_t
的最大值。数据类型size_t
能够存储任何对象的大小。最大大小取决于总线,例如 32 位或 64 位。
如果您尝试分配最大可数内存大小的内存,它一定会失败,因为这会阻塞您的整个地址空间。编译器会警告您 malloc
调用将始终失败。请求的大小毫无意义。
顺便说一句:9223372036854775807 是 0x7FFFFFFFFFFFFFFFF
关于c - 对象宏的最大大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55511064/