【问题标题】:Does an unused, empty class in C++ take memory?C++ 中未使用的空类是否占用内存?
【发布时间】:2018-05-12 19:28:17
【问题描述】:

编译中包含但完全未使用的空 C++ 类在运行时是否占用内存?如果有,我怎么知道?

例如

#include <iostream>

int main() {
    int a, b;

    // random operations
    a = 100;
    b = a ^ 0x2904af3e;
    a = b & 0xf92c92db;

    std::cout << a << " " << b << std::endl;

    return 0;
}

// does this take any memory?
class Empty {

};

【问题讨论】:

  • 不,它没有。
  • @NeilButterworth 当我使用 sizeof(Empty) 时,我得到了 1 个字节。我正在使用 Gnu C++ 编译器。
  • 如果你实例化它,类的实例将占用的内存大小 - 如果你不实例化它,它不会占用任何内存。
  • 我想你可以在这里找到答案stackoverflow.com/questions/2362097/…
  • @NeilButterworth 好的。感谢您的澄清。那么类本身在运行时不会有任何内存开销?

标签: c++ class memory


【解决方案1】:

未使用的类型将是编译器可以安全忽略的东西。当然,标准并没有说明需要多少空间,但是任何值得使用的编译器都会消除未使用的类型。或功能。或任何其他从未真正使用过的东西。

然而,在上述情况下未使用意味着未使用:没有任何代码使用该名称。编译器仍然必须注意该名称存在,并且如果其他人尝试使用该名称声明一个定义不同的类,您将获得 ODR 违规。哪些编译器不必报告。

即使从未使用类型来声明对象,如果您确实使用该名称,编译器也可能必须生成一些关于它的数据。例如,如果您对该名称调用 typeid。编译器必须静态地创建绑定到可执行文件中的类型信息。

【讨论】:

    猜你喜欢
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 2016-02-25
    • 2011-09-23
    • 2014-10-04
    • 1970-01-01
    相关资源
    最近更新 更多