5

これはスタック上の割り当てです。

char inStack[10]; 
// and 
MyStruct cl;

これはヒープに割り当てる必要があります。

char* inHeap = new char[10];
// and
MyClass cl = new MyClass();

変数MyClassが含まれている場合はどうなりますか? char test[10]これを行います:

MyClass cl = new MyClass()

...の 10 バイト長のコンテンツがMyClass::testスタックではなくヒープに割り当てられているということですか?

4

3 に答える 3

15

オブジェクト内に割り当てられるため、オブジェクトがヒープ上にある場合、配列はヒープ上になります。オブジェクトがスタック上にある場合、配列はスタック上にあります。オブジェクトが実行可能ファイルの静的メモリにある場合、配列もそこにあります。

C++ では、オブジェクトのメンバーはオブジェクト自体の一部です。オブジェクトのアドレスとそのサイズがわかれば、[address, address + size)そのアドレスがメモリ内の実際の場所 (ヒープ、スタックなど) に関係なく、クラスのすべてのメンバーが range 内のどこかにあることがわかります。

于 2012-05-14T16:57:06.840 に答える
5

メンバーMyClassがある場合、インスタンスが割り当てられたのと同じ方法で割り当てられます。char test[10]MyClass

MyClass mc; //mc.test is on the stack
MyClass * mcp = new MyClass; //mcp->test is on the heap
于 2012-05-14T16:58:03.960 に答える
2

言語の適切な用語は自動および動的ストレージであり、これらはスタックおよびヒープよりも少し意味があります。特に、自動ストレージは一般にスタックを意味するのではなく、関数のローカル変数のみを意味しますが、おっしゃるように、クラスのメンバーを定義している場合、自動ストレージは、スタックである可能性のある、囲んでいるオブジェクトがどこにあっても、ヒープまたは静的オブジェクト。

于 2012-05-14T18:26:02.230 に答える