繁体   English   中英

C ++指针内存使用情况

[英]C++ pointers memory usage

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

double x;
double* y = new double(x);

要么

double x;
double* y = &x;

在前者中,存在两个double s( xy指向的那个)。 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM