我有一个类:
class Foo{
std::vector<Sprite*> vec;
Sprite* bar = nullptr;
}
然后我做:
Foo zoom;
在程序执行的这个点上,哪个占用的空间更大? vec 还是 bar ?
编辑:
在下面的情况下,如果我这样做:Foo zoom;
会占用更少的空间:
class Foo{
Sprite* bar1 = nullptr;
Sprite* bar2 = nullptr;
Sprite* bar3 = nullptr;
}
或
class Foo{
std::vector<Sprite*> vec;
}
最佳答案
在这段代码中:
class Foo{
std::vector<Sprite*> vec;
Sprite* bar = nullptr;
};
bar
将是指针的大小,这取决于平台。通常,它将是 32 位(4 字节)或 64 位(8 字节)。
vec
将是 std::vector
对象的大小,这取决于您的标准库是如何实现的。
所以我们不能绝对肯定地说,但是我们可以根据标准要求std::vector
做什么来做出很好的猜测该类型的对象将大于单个指针。
大了多少?很难说。重要吗?没有。
通过声明指针数组* 来抵制尝试构建您自己的std::vector
的冲动。你不会比编译器更聪明。与使用标准库的类相比,您最终得到的代码既大又慢。这就是他们在那里的目的。
__
* 除非你的内存分析器实际上告诉你这里有问题。
关于c++ - 空 vector 占用的空间是否与指向当前设置为 nullptr 的类型的指针一样多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44542267/