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)
在前者中,double存在两个(x和,指向的一个y).x在堆栈y上和堆上分配.
在后者中,只有一个double存在(x也指向y).这里没有涉及堆分配.
所以,从表面上看,你是对的.
在这两种情况下,double堆栈中都存在一个,堆栈中也存在一个double*.两者之间的区别在于,在第一种情况下,堆上也有一个double分配(由分配的那个new double(x)).因此,第一种情况需要更多存储.
下面消耗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)