C++指针内存使用情况

C++ pointers memory usage

本文关键字:用情 情况 内存 指针 C++      更新时间:2023-10-16

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

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

double x;
double* y = &x;

在前者中,存在两个doublex和由y指向的一个)。x在堆栈上分配,y在堆上分配。

在后者中,仅存在一个doublex,也由y指向)。这里不涉及堆分配。

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

在这两种情况下,堆栈上都存在一个double,堆栈上也存在一个CCD _10。两者的区别在于,在第一种情况下,堆上还分配了一个double(由new double(x)分配的CCD_11)。因此,第一种情况需要更多的存储空间。

以下消耗堆上的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 = new double(x);

您有x、指针y的内存空间,以及存储x副本并由y指向的新分配的内存。

在本例中:

double x;
double* y = &x;

您有x和指向x的指针y的内存空间。这会占用较少的空间。

double x;
double* y = &x;

将采用sizeof(double) + sizeof(void*)

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

将占用CCD_ 24。还通过new从堆中分配内存。基于堆分配器也会有更多的记账开销(尤其是如果它分解了一个连续的空闲块),而且速度会更慢。

首先在第一行为1个双精度指针分配空间,然后在第二行为一个指针和另一个双精度指示器分配空间,并从旧指针复制值。后者为1个双精度和一个指针分配空间。因此,首先是更多的内存消耗。

相关文章: