私は機械工学の大学院生です。私の研究グループには、C++ で記述された社内の有限要素コードがあります。ベクトルと配列の多くのメモリが静的に割り当てられていることに気付きました。たとえば、次のようになります。
Element.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;
}
このように、ベクトルはこの関数に到達する最初の要素に対して 1 回だけ割り当てられ、残りのオブジェクトはそのメモリ空間を繰り返し使用します。
コードの開発を始めた最初の人は、C++ よりも C をよく知っていたので、多くのコードがこのように書かれています。
これらのベクトルと配列をグループに静的に割り当てる背後にある考え方は、これらの大きなメモリを一度だけ割り当てて繰り返し使用する方が高速であるということです。有限要素ごとに、または関数が呼び出されるたびに同じ配列を複数回割り当てる必要があるのと比較して (たとえば alloca を使用)。これは本当ですか?本当に速度に大きな違いがあるのですか?
静的メモリ割り当てを維持するか、それを取り除くかを決定するために、これについて結論に達しようとしています。私はこれに対する答えを数週間探していましたが、運がありませんでした。あなたの意見が結論に達するのに役立つことを願っています。
ありがとう。
ヘルナン