当我使用多个嵌套结构/类(有点像使用多维度堆数组)时是否有任何性能损失,或者它只是该语言的组织特性,以便更容易跟踪数据而编译器不会实际上看到有什么不同?
由于
答案 0 :(得分:3)
不是真的。类/结构只是将偏移定义到内存中,所以如果在类中的类中有一个类,编译器只会添加偏移量。
一旦你有指针(每个指针取消引用是一个内存读取和潜在的L2缓存未命中)或虚函数(非常糟糕,特别是在较旧的CPU上),性能就会发挥作用。
编辑:我应该注意一件事 - 如果你正在开发一个性能不是绝对至关重要的应用程序,那么关注的是良好的类设计而不是性能。当你编写需要以60fps运行的东西时,像L2缓存未命中这样的东西会产生很大的不同,但它与普通的桌面应用程序没什么关系。答案 1 :(得分:1)
不应该有任何性能或内存惩罚。它们只是语法上的糖,使程序员更容易。
答案 2 :(得分:1)
大多数情况下没有,正如其他人所提到的那样。但是,有一个小例外:相对于直接放在单个结构中的相同基元,将结构放在结构中会导致由于对齐问题导致的小内存使用损失。从理论上讲,这可能导致缓存未命中,这会影响性能。例如:
#include <iostream>
using namespace std; // So sue me
struct A {
double d;
int i;
};
struct B {
int j;
int k;
int l;
};
struct AB {
A a;
B b;
};
struct C {
double d;
int i;
int j;
int k;
int l;
};
int main() {
cout << sizeof(AB) << endl; // 32
cout << sizeof(C) << endl; // 24
}
答案 3 :(得分:0)
简短回答:不。