【问题标题】:Can I force a C++ class to compile using the minimum amount of space?我可以强制 C++ 类使用最少的空间进行编译吗?
【发布时间】:2017-10-08 02:16:57
【问题描述】:

我有一个类,我会从字面上实例化数十亿个。我尽了最大努力在其中放入尽可能少的数据,并在为 x64 架构编译时将其缩减到 10 个字节:unsigned short intsize_t。但是,当我将鼠标悬停在 sizeof(myclass)(在 VS 中)时,它会报告 16 个字节。如果我注释掉任何一个字段,类的大小就是你所期望的,分别是 10 个字节和 2 个字节。

有没有办法指示编译器只为我的类使用 10 个字节?

【问题讨论】:

  • 试试#pragma pack
  • 谢谢!在答案中输入#pragma pack(2),我会将其标记为最佳答案。
  • @dfoverdx 使用 pack(1) 而不是 2
  • @RemyLebeau 为什么pack(1) 我知道我的对象是偶数字节?
  • @dfoverdx 如果有一天你决定添加一个 1 字节的 charbool 成员,pack(2) 不会产生尽可能小的尺寸,会有 1 个字节的填充。如果您想要尽可能小的尺寸,请使用尽可能小的对齐方式。

标签: c++ compiler-optimization memory-optimization


【解决方案1】:

#pragma pack 可以使您的结构更小。另一方面,它会使检索成员数据变慢,因为不能保证字节的对齐。因此,编译器将需要额外的指令来从不同的内存位置获取数据。欲了解更多信息,此链接有一篇很棒的帖子:#pragma pack effect

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    相关资源
    最近更新 更多