C++指针内存使用情况

squ*_*boo 2 c++ pointers memory-management

继续绕圈子,但我仍然不清楚这一点.对答案有感觉; 但不确定.下面哪个代码消耗更多内存?[如果我是正确的,应该是前者.]

double x;
double* y = new double(x);
Run Code Online (Sandbox Code Playgroud)

要么

double x;
double* y = &x;
Run Code Online (Sandbox Code Playgroud)

Gra*_*and 7

在前者中,double存在两个(x和,指向的一个y).x在堆栈y上和堆上分配.

在后者中,只有一个double存在(x也指向y).这里没有涉及堆分配.

所以,从表面上看,你是对的.

在这两种情况下,double堆栈中存在一个,堆栈中也存在一个double*.两者之间的区别在于,在第一种情况下,堆上有一个double分配(由分配的那个new double(x)).因此,第一种情况需要更多存储.


Kon*_*rad 7

下面消耗sizeof( double ) + sizeof( double* )再加sizeof( double )上堆:

double x;
double* y = new double(x);
Run Code Online (Sandbox Code Playgroud)

以下消耗sizeof( double ) + sizeof( double* ):

double x;
double* y = &x;
Run Code Online (Sandbox Code Playgroud)