Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 分配给变量number的内存是在堆上还是堆栈上?_C++_Stack_Heap Memory - Fatal编程技术网

C++ 分配给变量number的内存是在堆上还是堆栈上?

C++ 分配给变量number的内存是在堆上还是堆栈上?,c++,stack,heap-memory,C++,Stack,Heap Memory,我想知道我是否在函数中声明了一个变量,它是在堆栈还是堆上分配的。 假设我有这个例子 A类{}; 虚无乐趣(){ 一个数字; } 由于函数按照knowlede放置在堆栈内,因此该编号将在何时分配内存,即在堆栈或堆上 首先感谢您。 < P>首先,您可能会考虑查看您订阅的错误信息,即每个对象都在“堆栈”或“堆”上。 当你编写C++时,你不是在编程计算机;您正在描述程序的行为。编译器的工作是为计算机编程,当它这样做时,它可能会也可能不会选择在该平台上使用某些“堆栈”或“堆”(如果所述平台甚至有此功能!

我想知道我是否在函数中声明了一个变量,它是在堆栈还是堆上分配的。
假设我有这个例子

A类{};
虚无乐趣(){
一个数字;
}
由于函数按照knowlede放置在堆栈内,因此该
编号将在何时分配内存,即在堆栈或堆上

首先感谢您。

< P>首先,您可能会考虑查看您订阅的错误信息,即每个对象都在“堆栈”或“堆”上。

当你编写C++时,你不是在编程计算机;您正在描述程序的行为。编译器的工作是为计算机编程,当它这样做时,它可能会也可能不会选择在该平台上使用某些“堆栈”或“堆”(如果所述平台甚至有此功能!)来执行某些特定任务

对于这样一个位于函数内部的基本变量,根本不需要任何内存使用;程序的行为并不依赖于此

也就是说,我们可以应用一些一般规则。“使用odr”(查找)的更复杂对象在运行时可能需要可寻址性,并且在您可能正在使用的主流平台上,这将确实涉及堆栈或空闲存储(“堆”)。不过,如果我们将此属性称为“自动存储持续时间”或“动态存储持续时间”,那么我们不会出错

你的问题的直接答案满足了上述迂腐的说法,同时也符合主流计算机上的实际情况,那就是你的函数中没有动态分配。只有
malloc
(&friends)和
new
可以做到这一点,因此只有以这种方式创建的对象(或这些对象的成员)将生活在传统上由动态分配的对象使用的内存区域中


另外,这也没什么关系。

本例中介绍的任何现代编译器都不会为该变量分配存储,因为该变量未使用,也没有副作用。即使它被使用,人们可能会争辩说,如果它可以用作临时(例如,仅在寄存器中)的话,它仍然可能既不在堆栈上也不在堆上。@paddy我更新了这个问题,并说它正在某处使用。有些系统没有堆栈或堆。在我看来,用这些术语来思考不是很有成效。如果在代码块内定义变量,则当执行到达该行时,该变量将开始存在,当该代码块结束时,该变量将停止存在:在上面发布的代码中,假设该变量未被编译器优化,并且它实际存在于内存中(不仅存在于CPU寄存器中),然后它可能会存储在堆栈上(假设您的CPU体系结构支持在堆栈上存储数据)。