在C++;,静态、动态和局部变量存储在哪里?用C和Java怎么样? C++中,静态、动态和局部变量存储在哪里?在C和Java中如何?

在C++;,静态、动态和局部变量存储在哪里?用C和Java怎么样? C++中,静态、动态和局部变量存储在哪里?在C和Java中如何?,java,c++,c,Java,C++,C,从这里开始:如果您正在编译C/C++以创建windows可执行文件(或任何x86系统),则静态和全局变量通常存储在称为数据段的内存段中。该内存通常也被划分为已初始化变量和未被程序在其定义中初始化的变量 在函数中定义的局部变量与函数的返回地址一起分配到程序的运行堆栈上 “动态”我假设你指的是使用new或malloc分配的东西。这些数据通常存储在另一个称为“heap”的内存区域(与“heap”数据结构无关) 所有这些细节都高度依赖于平台,通常,作为程序员,您甚至不需要知道它们。C,C++ 静态:代

从这里开始:

如果您正在编译C/C++以创建windows可执行文件(或任何x86系统),则静态和全局变量通常存储在称为数据段的内存段中。该内存通常也被划分为已初始化变量和未被程序在其定义中初始化的变量

在函数中定义的局部变量与函数的返回地址一起分配到程序的运行堆栈上

“动态”我假设你指的是使用
new
malloc
分配的东西。这些数据通常存储在另一个称为“heap”的内存区域(与“heap”数据结构无关)


所有这些细节都高度依赖于平台,通常,作为程序员,您甚至不需要知道它们。

C,C++

  • 静态:代码编译到的模块/dll/共享库的数据段
  • 动态:在任何内存堆上,例如C运行时堆、Win32堆、自定义堆。数据堆的哪一个取决于如何分配内存(并且对于C++,如果操作符NeX/DELL被重写以使用特定的分配器)。
  • 本地:在当前函数/方法的堆栈帧上
Java

  • 静态:在JVM堆上
  • 动态:在JVM堆上
  • 本地:在当前函数/方法的堆栈帧上

那么LISP、FORTRAN和Haskell呢?哦,那PHP和Perl呢?你忘了脑力操和空格…
static
在这些语言中意味着相似但微妙不同的东西<代码>本地和
动态
不是正交概念。因此,如果不知道你对这个主题已经了解多少,就很难准确地回答这个问题。也许,如果您更清楚地解释了您想知道的内容,您可以得到更好的答案。您是在看标准中还是在某些实现中如何编写它们?它们是以实现定义的方式存储的。当然。最明显的是,任何一个C/C++“程序员”都知道他们的变量存储在哪里。它与领土相伴而来。对于托管语言,有人可能会提出相反的观点,但对于C/C++来说则不然。我想说的是,了解您所使用的结构是如何实现的几乎总是很有用的(有关这一点的更多讨论,请参阅Joel Spolsky的“泄漏抽象定律”一文)。但对于大多数日常活动来说,从更高的抽象层次思考问题可能更有用。我认为了解堆栈变量有一个有用的理由——如果遇到意外的堆栈溢出,但没有任何无限递归,需要查找的一个地方是局部变量的大型定义。您应该知道数据的分配位置,因为可能存在较大的性能差异;除非性能无关,我想。@Joltcola先生绝对正确!因为在编程讲座中经常跳过内存部分的新手程序员错过了编程本身的一个关键部分。该死,我知道我上一所大学的人没有学习内存结构的意图,后来,由于大量内存泄漏和不安全的校验标志,他们无法创建高效稳定的程序。