我想分配一个大的静态数组( - 想要避免动态分配,例如使用std :: vector,甚至使用' new',所以我可以保证物理地址是连续的,可以有效地预取。我的阵列大小由外部因素决定,但它们是提前知道的 - 在这个例子中,我总是需要3211264个元素。
如果我只是分配一个浮点数组,一切正常:
#include <iostream>
#include <cstdlib>
using namespace std;
float f[3211264];
int main()
{
for(int i = 0; i < 3211264; i++)
f[i] = rand();
for(int i = 0; i < 3211264; i++)
cout << f[i];
}
但是,如果我在一个类中包装我的数组,它会导致Seg Fault:
#include <iostream>
#include <cstdlib>
using namespace std;
class T
{
public:
T();
private:
float f[3211264];
};
T::T()
{
for(int i = 0; i < 3211264; i++)
f[i] = rand();
for(int i = 0; i < 3211264; i++)
cout << f[i];
}
int main()
{
T myT;
}
这个内存是如何分配的,当我将数据包装在一个类中时,它有什么不同的原因吗?
我希望类开销很小,任何基于对象的重新对齐或填充最多只能是页面(4K),对吗?对我来说,课程主要是为了可读性和组织性,但如果它会对性能产生重大影响,我只是抛弃它并声明一堆全局...
我的编译器信息:
配置: - prefix = / Applications / Xcode.app / Contents / Developer / usr --with-gxx-include-dir = / usr / include / c ++ / 4.2.1
Apple LLVM版本7.3.0(clang-703.0.29)
目标:x86_64-apple-darwin15.6.0
线程模型:posix
答案 0 :(得分:0)
在使数组成为类成员的代码中,它不是静态分配的。如果你说:
static T myT;
虽然我无法相信静态分配会给你带来任何严重的性能提升。