C++分配标准?
C++ allocation standard?
假设我有一个类Foo和一个函数Bar
void Bar(void)
{
Foo a();
}
这是否意味着 a 不一定不会在主内存中分配? 或者这是否取决于编译器,因此编译器可能会分配内存并产生与我们编写相同的结果Foo* a=new Foo
Foo a();
是一个函数声明。它应该是Foo a
的;a
在堆栈的内存中。
您要查找的术语是一个自动变量。这意味着该变量中包含的对象保证在作用域结束时自动销毁。
使用new
时,仅当您显式delete
对象(或通过显式使用负责销毁对象的机制,如智能指针)时,才会销毁对象。换句话说,生存期是手动管理的。
当然,在任何情况下,自动生存期语义都与手动语义不同。话虽如此,这两种情况下的存储位置(堆栈、堆、寄存器或其他东西)都是无关紧要的。
从技术上讲,如果a
适合寄存器,它最终可能会使用"无内存"。否则,它将在堆栈上分配,在我称之为"主内存"的内存中,与Foo *a = new Foo;
相同的内存类型,但不同的部分[new
使用堆内存,堆栈与堆不同,但相同的内存类型]。
当然,如果类Foo
包含一个构造函数,它本身可以调用new
和各种其他函数,这些函数可能会也可能不会改变内存的使用......
相关文章:
- C++标准对局部变量的存储和分配有什么保证?
- 如果可能,标准::映射分配是否静态
- 在标准输出中执行打印会导致数组中随机分配值
- 为什么标准在移动分配运算符中使用交换?
- 分配但不使用分配器的标准图书馆设施
- C 标准是否可以保证使用新的动态分配
- 非标准语法;使用 '&' 创建指向成员的指针错误,将成员函数分配给向量时出错
- 如何将"nothing"分配给标准::可选<T>?
- 如何为标准功能分配空间并做记忆
- 分配矩阵列标准偏差的向量正在改变其值(RcppArmadillo)
- C++标准库中是否有保证不执行动态内存分配的函数或类
- 标准算法库中的哪些算法进行分配?有没有办法指定这种分配是如何发生的
- C++分配标准?
- 如何将字符串的值分配给标准::unique_ptr<标准::字符串>?
- 为什么标准允许我在没有析构函数的情况下自由存储分配类
- C++ 动态分配标准::地图比较器
- 标准迭代器分配错误
- 移动分配与标准复制和交换不兼容
- 标准::map 中密钥类型的分配运算符要求
- 标准::矢量内存分配问题