据我所知,每一种类型--比如int--只能存储在以2的幂开始的内存地址中.现在我的问题是,Malloc如何满足这种要求?例如,如果我调用
void * ptr;
ptr = malloc(8);
那么我想要在给定的8字节的内存块中存储什么就不明显了.因此,是否Malloc总是返回块的起始地址,该地址位于2的最大幂,从而可以存储所有标准类型?如果我误解了什么,请随时纠正我.
据我所知,每一种类型--比如int--只能存储在以2的幂开始的内存地址中.现在我的问题是,Malloc如何满足这种要求?例如,如果我调用
void * ptr;
ptr = malloc(8);
那么我想要在给定的8字节的内存块中存储什么就不明显了.因此,是否Malloc总是返回块的起始地址,该地址位于2的最大幂,从而可以存储所有标准类型?如果我误解了什么,请随时纠正我.
C 2018 7.22.3规定了内存分配 routine 的行为,它的第1段说"…如果分配成功,则返回的指针被适当地对齐,以便可以将其分配给指向具有基本对齐要求的任何类型对象的指针…"
6.2.8 2表示:
…下列类型的对中要求应为基本对中:
所有原子、限定或非限定的基本类型;
所有原子、限定或非限定枚举类型;
所有原子、限定或非限定指针类型;
元素类型具有基本对齐要求的所有数组类型;
第7条中规定的作为完整对象类型的所有类型;
所有 struct 或联合类型,其所有元素的类型都具有基本对齐要求,并且其元素都没有指定不是基本对齐的对齐的对齐说明符.
6.2.5 14表示:
类型
char
、有符号和无符号整数类型以及浮点类型统称为basic types.