[英]C++ pointers memory usage
继续绕圈子,但我仍然不清楚这一点。 对答案有感觉; 但不确定。 下面哪个代码消耗更多内存? [如果我是正确的,应该是前者。]
double x;
double* y = new double(x);
要么
double x;
double* y = &x;
在前者中,存在两个double
s( 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);
以下消耗sizeof( double ) + sizeof( double* )
:
double x;
double* y = &x;
double x;
double* y = &x;
将采取sizeof(double) + sizeof(void*)
double x;
double* y = new double(x);
将采用sizeof(double) + sizeof(double) + sizeof(void*)
。 还通过new
从堆中分配内存。 基于堆分配器还会有更多的簿记开销(特别是如果它分解了一个连续的空闲块),它会更慢。
第一个。 有两个双打和一个指针(通常是长整数)
在第二个中,你只有一个双指针和一个指针
在这个例子中:
double x;
double* y = new double(x);
你有x
的内存空间,指针y
,以及存储x
副本的新分配内存,由y
指向。
在这个例子中:
double x;
double* y = &x;
你有x
的内存空间,指针y
指向x
。 这使用更少的空间。
首先在第一行分配1个double的空间,然后在第二行为1个指针和另一个double分配空间,并从旧的复制值。 后者为1倍和指针分配空间。 首先是更多的内存消耗。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.