- cplusplus/
- 是否有名为';堆栈';在C++;存储自动变量
内存中有一个特定的区域,称为C++中的堆栈,其中自动变量被存储。 < p>含糊的问题,但是的。C++中的程序栈通常在程序的虚拟地址空间中高开始,并向下移动到程序堆的虚拟地址空间。
是否有名为';堆栈';在C++;存储自动变量
内存中有一个特定的区域,称为C++中的堆栈,其中自动变量被存储。 < p>含糊的问题,但是的。C++中的程序栈通常在程序的虚拟地址空间中高开始,并向下移动到程序堆的虚拟地址空间。
是否有名为';堆栈';在C++;存储自动变量
内存中有一个特定的区域,称为C++中的堆栈,其中自动变量被存储。 < p>含糊的问题,但是的。C++中的程序栈通常在程序的虚拟地址空间中高开始,并向下移动到程序堆的虚拟地址空间。,c++,memory-management,C++,Memory Management,编辑:
因为我对这一点说“是”引发了争议,所以我会在答案后面加上一句。C++标准不专门调用堆栈来实现本地存储。但是,如上所述,这是一种常见的实施实践。否。本标准仅提及:
-静态存储时间
-自动存储持续时间
-动态存储持续时间
C++中没有“栈内存”这个概念。然而,人们通常会说,自动存储持续时间变量是“在堆栈上分配的”,因为从计算机科学的角度来看,它是以这种方式实现的“堆”是另一个术语,通常指动态存储持续时间,但在标准中未提及。请参阅,我在其中对此进行了详细解释
综上所述,引自:
术语“堆”和“
编辑:
因为我对这一点说“是”引发了争议,所以我会在答案后面加上一句。C++标准不专门调用堆栈来实现本地存储。但是,如上所述,这是一种常见的实施实践。否。本标准仅提及:
-静态存储时间
-自动存储持续时间
-动态存储持续时间
<> C++中没有“栈内存”这个概念。然而,人们通常会说,自动存储持续时间变量是“在堆栈上分配的”,因为从计算机科学的角度来看,它是以这种方式实现的“堆”是另一个术语,通常指动态存储持续时间,但在标准中未提及。请参阅,我在其中对此进行了详细解释
综上所述,引自:
术语“堆”和“堆栈”是
过时的,与当
使用的最流行的运行库
这些数据结构用于存储对象
它们是动态的,并且
分别自动分配
(静态分配的对象适合
顺便说一句,两个类别都没有)
如今,这并不总是正确的,
而且这肯定不是政府强制的
C++标准,不关心
存放东西的地方。它只在乎
关于它们是如何产生和发展的
被毁了,大概多久了
活着
希望这能帮你解决问题。
- 大多数处理器都有一个称为堆栈的内存区域
- C++编译器通常将处理器堆栈用于自动变量,但不需要这样做。一种非常常见的情况是,变量保存在处理器寄存器中,从未存储到内存中
这个问题似乎引发了一场争论:正确答案是标准定义的内容,还是大多数(如果不是所有)实现中实际执行的内容。让我给出一个长的回答,而不是继续用评论来嘲讽
一个简单的类比:假设你试图教某人开始地理。有一次,学生问:“法国在欧洲吗?”你会如何看待这个问题的正确答案?
(a) 不。法国宪法没有规定该国的边界。因此,不可能说出法国在哪里
(b) 不,有可能在未来的某一天,地球将被毁灭,法国难民将在另一个星球定居,并在那里重建他们的国家。或者,法国可能位于另一个地方的其他宇宙。因此,我们不能说法国在哪里
(c) 对。法国在欧洲
(d) 基本上是的。法国中央政府和大部分人口都在欧洲,尽管他们确实控制着其他地方的领土,如南美的法属圭亚那和印度洋的留尼汪岛
我会给出答案(c)如果问题是以一般方式提出的,或者是由初学的学生提出的,或者(d)如果上下文表明需要更精确的答案,我会给出答案。显然,这里的一些海报坚持正确答案是(a)或(b)。他们说,从事实上看世界是错误的,对一个问题的唯一正确答案是寻找一些描述世界的文件,正如某些权威所宣称的那样
如果你认为这个类比有点牵强,你想要一个更纯粹的IT讨论,让我提供一个更接近的类比。假设你在教一门关于网页设计的课,一个学生问:“我如何在网页中表达复杂的数学公式?”
你会说正确的答案是,“使用标签,它的相关标签,如上面和下面,根和数组,如HTML3.2标准中定义的。”
从HTML3.2标准确实包含这样的标签的意义上来说,这样的答案是绝对正确的。不幸的是,没有主要的浏览器实现这些标记。事实上,它是在一个标准是没有太多的实际用途
我可以对IT产品的许多特性说同样的话。“如何限制SQL查询的输出行数?”真正的答案取决于您使用的数据库引擎。我不知道SQL标准说了什么,如果它提供了任何方法,我也不在乎,因为这无关紧要。在现实生活中,我不会在数据库服务器上运行ANSI SQL标准,而是运行Postgres、Oracle、MySQL或其他实际产品
我并不是说,一般来说,标准并不重要。当然,我们应该有好的标准,产品应该尽可能地符合这些标准。但在现实世界中,最终重要的是实施
坚持认为计算机在实际生活中如何工作并不重要,但是我们只能考虑某人认为它应该如何工作,这对于试图写在真实计算机上运行的程序的人来说是没有用的。
(是的,如果您对跨平台兼容性和向上兼容性感兴趣,那么编写可以与任何符合标准的编译器一起工作的程序是有实际意义的。我们当然可以讨论使用依赖于特定实现的技巧的智慧:什么时候性能或编码便利性会超过非标准实现的脆弱性?)
坦白地说,我认为这种回答是一种迂腐,让初学的学生感到困惑。当初学的学生问法国在哪个大陆上时,他不想也不需要一长串的假设,理论上