C++指针内存使用情况
C++ pointers memory usage
继续兜圈子,但我对此仍不清楚。对答案有感觉;但不确定。下面哪个代码消耗更多内存?[如果我是对的,应该是前者。]
double x;
double* y = new double(x);
或
double x;
double* y = &x;
在前者中,存在两个double
(x
和由y
指向的一个)。x
在堆栈上分配,y
在堆上分配。
在后者中,仅存在一个double
(x
,也由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个双精度和一个指针分配空间。因此,首先是更多的内存消耗。
相关文章:
- 如何在没有死锁和/或争用的情况下正确使用 std::mutex C++?
- 在集合的情况下使用emplace_hint的用例是什么?
- 在没有堆的情况下用两种方法构造对象
- 如何在不中断的情况下正确使用C++中的切换用例语句中的Fallthrough
- 给定一个填充无符号字符**的 C 函数,如何在没有中间副本的情况下用数据填充 std::vector
- 在这种情况下,有没有办法用单个解决方案替换两个仅在类型上不同的相似函数?
- 为什么在一种情况下,我会收到带有字符串文字的已弃用转换警告,而在另一种情况下却没有?
- 不能在没有对象的情况下调用成员函数,但我用对象调用函数
- 在不先显式调用析构函数的情况下,在旧对象上使用placement new是否危险
- 无法在前面有多余空格的情况下获取要打印的数组.只有第一个值会用空格打印
- 在可疑的情况下发出叮当警告:函数'foo'可以用属性"noreturn"声明吗?
- 如何在没有任何JavaScript知识的情况下用PNaCl编写C++HTML5应用程序
- 如何在不使用开关大小写的情况下用C++编写菜单驱动的程序
- 在什么情况下,运算符=应该用左值/右值重载而不是复制和交换来实现
- 在没有测试用例的情况下提升单元测试框架
- 在这种情况下,为函数赋值有什么用
- 如何在没有_setmode的情况下用C++输出unicode
- 如何在没有STL的情况下用c++中的Key创建和访问内存块
- 如何在不锁定文件的情况下用C++编写文件
- clang与gcc运行时的区别:用clang构建的c++类模板在没有复制构造函数的情况下崩溃,用复制构造函数构建的gcc