如果使用非指針成員變量和非指針成員函數在C++中創建類,但您是否動態初始化類的實例(使用指針)是否會影響內存使用堆或堆棧?堆棧vs堆棧內存使用情況C++用於動態創建的類
一個項目的有用信息我正在努力減少內存堆棧:)。
任何反應非常感謝。
非常感謝和快樂的編碼。
如果使用非指針成員變量和非指針成員函數在C++中創建類,但您是否動態初始化類的實例(使用指針)是否會影響內存使用堆或堆棧?堆棧vs堆棧內存使用情況C++用於動態創建的類
一個項目的有用信息我正在努力減少內存堆棧:)。
任何反應非常感謝。
非常感謝和快樂的編碼。
如果您使用運營商new
分配您的課程,那麼將其放在堆上。無論是否通過指針訪問成員變量。
class A {
int a;
float* p;
};
A* pa = new A(); // required memory is put on the heap
A a; // required memory is put on the stack
但要小心,因爲並非每個指針訪問的實例都可能實際位於堆中。例如:
A a; // all members are on the stack
A* pa = &a; // accessed by pointer, but the contents are still not on the heap!
在另一側位於堆棧上的類實例可以具有其大部分在堆中的數據:
class B {
public:
std::vector<int> data; // vector uses heap storage!
B() : data(100000) {}
};
B b; // b is on the stack, but most of the memory used by it is on the heap
如果使用'new'創建對象,則在堆中創建對象。
用於指針變量存儲器將在stack
但是當被分配您正在使用new
或malloc
那麼該內存段將分配在heap
此外,具有靜態存儲持續時間的對象(例如全局對象或靜態本地對象)分配在堆上 –
感謝大家的徹底和迅速的迴應! @king_nak,這是否意味着在函數中調用的對象(不在main中)也位於堆上,而不管是否使用了new? –