【发布时间】:2020-04-16 05:16:57
【问题描述】:
在下面的代码中,我定义了一个 9 字节的结构 header,它的大小为 16 字节。 然后我从堆中动态分配 9 个字节并将其分配给 header 指针。
struct header
{
uint8_t chunk_id;
long int format;
};
int main()
{
std::cout << "sizeof(header) " << sizeof(header) << '\n';
auto head = (header*)malloc(9);
head->chunk_id =3;
head->format=5;
std::cout << (int)head->chunk_id << " " << head->format << '\n' << sizeof(*head);
free(head);
return 0;
}
输出:
sizeof(header) 16
3 5
16
事实证明,sizeof 仍然通知这个对象是 16 个字节(虽然是 9 个字节)。我想它只是看结构的定义。 但是当 sizeof 的大小和实际对象大小不匹配时,一切如何工作(包括运算符'->')?
【问题讨论】:
-
sizeof是一个编译时常量。它对您在运行时将要做什么一无所知。其次,您的代码具有未定义的行为,因为您只为实际大小为 16 字节的内容分配了 9 个字节。
标签: c++ struct memory-alignment