我是机械工程专业的研究生。我的研究小组有一个用 C++ 编写的内部有限元代码。我注意到向量和数组的大量内存是静态分配的,例如:
在元素.h
// A vector to store a finite element residual vector in h file
static Real* sRe
在 Element.C 中
if ( ! sIsResAndJacAllocated )
{
UInt numElemDofs = this->GetNumDofs();
// Residual storage
sReXt = new Real[numElemDofs*numElemDofs];
sIsResAndJacAllocated = true;
}
以这种方式,向量只为到达此函数的第一个元素分配一次,其余对象只是重复使用该内存空间。
第一个开始开发代码的人比 C++ 更了解 C,这就是为什么很多都是这样编写的。
在组中静态分配这些向量和数组的想法是,只分配一次这些大块内存并重复使用它会更快;与必须为每个有限元素或每次调用函数时(例如使用 alloca)分配相同的数组相比。这是真的?速度差别真的很大吗?
我们正试图就此得出结论,以决定是否应该保留静态内存分配或摆脱它。几个星期以来,我一直在寻找这个问题的答案,但没有运气。希望您的意见有助于得出结论。
谢谢。
埃尔南