gpt4 book ai didi

c++ - 最小化总结构内存

转载 作者:搜寻专家 更新时间:2023-10-31 01:46:11 26 4
gpt4 key购买 nike

我有一个结构:

struct st
{
short a;
int *b;
char ch;
};

short 是 2 个字节
int* 在 x64 中是 8 个字节
char 为 1 个字节

以上所有加起来应该有 11 个字节。但是如果我执行 sizeof(st) 我会得到 24 个字节。为什么 struct 使用更多内存以及如何将内存减少到 11 个字节?

最佳答案

pragma pack 是通常使用的,但它并不像您想要的那样便携。这是它的文档:

两者都提供了#pragma pack(n)pushpop

在没有打包的情况下,尝试重新排序 struct:

struct st
{
int *b;
short a;
char ch;
};

如果数据已打包,您必须小心访问数据。您可能需要 memmov(或 memcpy)来确保跨所有平台的可移植性。否则,您可能会在 Windows 上遇到 EXCEPTION_DATATYPE_MISALIGNMENT 或在 Linux 上遇到 SIGBUS 错误。

Microsoft 在 Windows Data Alignment on IPF, x86, and x64 上有一篇很好的文章.

-Wstrict-aliasing-Wcast-align 将帮助您找到痛点。

关于c++ - 最小化总结构内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21010346/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com