gpt4 book ai didi

结构和类之间的 C++ 区别 VS2015 中的初始化

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:44:12 24 4
gpt4 key购买 nike

我在“堆栈初始化”的性能方面遇到了问题。我正在使用优化 /O2(速度)的 Visual Studio 2015 编译我的代码。

参见以下结构:

template<typename T, size_t SIZE = 0>
TYPE SimpleArray;

template<typename T>
TYPE SimpleArray<T, 0> {
public:
size_t _size;
T * _ptr;
SimpleArray(T * ptr, size_t size) : _size(size) , _ptr(ptr) {}
SimpleArray() : _ptr(0), _size(0) {}
};

template<typename T, size_t SIZE>
TYPE SimpleArray : public SimpleArray<T> {
public:
T _array[SIZE];
SimpleArray() : SimpleArray<T>(_array, SIZE) {}
};

我尝试通过以下方式衡量性能:

template<size_t SIZE>
void test() {
Stopwatch stackWatch;
stackWatch.Start();
for (volatile size_t i = 0; i < 100000000; ++i) {
SimpleArray<char, SIZE> list;
}
stackWatch.Stop();

std::cout << "size\t" << SIZE << "\ttime\t" << stackWatch.ElapsedMilliseconds() << std::endl;
}

我针对小于 1MB 的大小对其进行了分析:

template<size_t SIZE = 1>
void invokeTests() { test<SIZE>(); invokeTests<SIZE * 2>(); }
template<>
void invokeTests<(1 << 20)>() {}

int main() {
invokeTests();
return 0;
}

如果我使用类:

#define TYPE class

我得到了我意想不到的结果:

size    1       time    204
size 2 time 187
size 4 time 203
size 8 time 219
size 16 time 187
size 32 time 250
size 64 time 688
size 128 time 1422
size 256 time 1719
size 512 time 1859
size 1024 time 2265
size 2048 time 3422
size 4096 time 6063
size 8192 time 10812
size 16384 time 20203
size 32768 time 40953
size 65536 time 141813
...

如果我使用结构:

#define TYPE struct

我得到了以下结果,这正是我所期望的:

size    1       time    203
size 2 time 187
size 4 time 188
size 8 time 187
size 16 time 203
size 32 time 203
size 64 time 188
size 128 time 187
size 256 time 188
size 512 time 187
size 1024 time 188
size 2048 time 187
size 4096 time 203
size 8192 time 188
size 16384 time 187
size 32768 time 188
size 65536 time 187
...

我知道导致性能下降的原因。类的性能下降是由所有 _array 元素“归零”引起的。但这是为什么呢? 是错误还是预期行为

编辑: 我发现如果设置了编译器选项 /sdl/GS 就会发生这种情况。但是仍然存在同样的问题:为什么 VS 会区分结构和类?

最佳答案

关于结构和类之间的 C++ 区别 VS2015 中的初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42588395/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com