スタックとヒープについて、簡単には知っているのですが、
確認したいことがあります。
現在の理解は以下です。
- 自動変数はスタック、newしたものはヒープ
- 別の理解として、関数を抜けたら自動で消える変数がスタックにあり、そうではないのがヒープにある
- スタック上に大きな配列などを作るべきでない
現在扱っているコードで大規模な配列を使用している箇所がありますが、今後さらにデータが大きくなる可能性があるため、
スタックに作られると思しき箇所は修正しようと考えていますが、
以下のサンプルコードで理解が正しいかをご教示頂きたいです。
cpp
1class Hoge { 2private: 3 int x[10000]; // Pattern(A): On-HEAP, but Pattern(B): On-STACK 4public: 5 void foo() { 6 int temp[10000]; // Always On-STACK for both Pattern(A) and (B) 7 return; 8 } 9}; 10 11int main(void) { 12 Hoge* A = new Hoge(); // Pattern(A) 13 Hoge B; // Pattern(B) 14 return 0; 15}
- メンバ変数の
inx x[10000]
はクラスの定義の方法(newしたか否か)でヒープかスタックか変化する - 関数
foo
内のint temp[10000]
は常にスタックに作られる
と理解しています。 ※コードや数字に特に意味はございません。
いつもお世話になります。
よろしくお願い申し上げます。
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/11 16:16
2019/05/12 06:25
2019/05/12 09:49