C ++中一个未使用的空类是否占用内存?

时间:2018-05-12 19:28:18

标签: c++ class memory

编译中包含但是完全未使用的空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 {

};

1 个答案:

答案 0 :(得分:0)

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

然而,在上述情况下未使用意味着未使用:任何地方都没有代码使用该名称。编译器仍然必须注意该名称是否存在,如果其他人试图声明具有该名称的定义不同的类,则会出现ODR违规。哪些编译器不必报告。

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