53得票6回答
为什么在C++内存管理中,“自动”和“动态”这些术语比“堆栈”和“堆”更受青睐?

根据stackoverflow上的许多问题和答案,我了解到引用生命周期由自动存储管理的对象比堆栈中的对象更好。 此外,动态分配的对象不应称为位于堆上,而应称为位于动态存储器上。 我知道有自动、动态和静态存储器,但从未真正理解自动-堆栈和动态-堆之间的区别。为什么前者更受欢迎? 我不是在...

52得票7回答
string.c_str()需要进行内存释放吗?

我的代码经常将C++字符串转换为C字符串,我想知道原始字符串是否在堆栈上分配。 C字符串会在堆栈上分配吗?例如:string s = "Hello, World!"; char* s2 = s.c_str(); s2会在栈上分配还是堆上分配?换句话说,我需要删除s2吗? 相...

48得票12回答
在C语言中创建“类”,使用栈还是堆?

每当我看到 C 语言中的“类”(指任何结构体,通过访问以它为第一个参数的指针作为参数的函数来使用)时,我会看到它们是这样实现的:typedef struct { int member_a; float member_b; } CClass; CClass* CClass_cr...

47得票3回答
为什么内存分成栈和堆?

可能重复: 栈和堆是什么,它们在哪里? 我有几个关于栈和堆的问题。 基本要知道的是,栈比堆快,但是容量有限(如果我说错了,请纠正我)。 然而,我一直想知道栈和堆究竟是如何工作的。RAM只是一块内存,它没有被划分为“栈”和“堆”(或者说它是吗?)。如果是这样的话,为什么我们首先要将内...

47得票15回答
一个C++类能否确定它是在堆上还是栈上?

我有class Foo { .... } 有没有一种方法让Foo能够分离出:function blah() { Foo foo; // on the stack } 并且function blah() { Foo foo* = new Foo(); // on the heap } 我...

46得票3回答
所有的静态成员都存储在哪里?

我正在尝试学习C#如何管理内存。我卡在静态元素上,我阅读了许多关于这个主题的博客和文章,但是我找不到一个令人满意的答案。 让我们定义一个代码块来帮助找到答案。class myClass { static string myStr = "String Data"; static...

43得票2回答
C++中的全局变量存储在堆栈、堆内存还是两者都不是?

起初我非常确定正确答案应该是“没有一个”,因为全局变量存储在数据内存中,但后来我找到了罗伯特·拉福尔(Robert Lafore)的这本书,名为《C++面向对象编程》,它明确指出,根据C++标准,全局变量存储在堆上。现在我感到非常困惑,无法弄清楚对所提出的问题的正确答案。 为什么全局变量会存...

41得票3回答
类成员和显式堆/栈分配

假设我们有以下4个类:class A { public: A(void) : m_B() { } private: B m_B; } class B { public: ...

41得票2回答
堆栈和永久空间的区别

Java内存空间(Perm Space、Stack空间、Heap空间)有哪些不同之处? JVM在什么时候使用其中一个或另一个? 如果我使用Scala/Groovy等语言,是否存在差异?

37得票1回答
当弹出x86堆栈以访问函数参数时,出现分段错误

我会尽力进行x86汇编和C的链接。 我的C程序:extern int plus_10(int); # include <stdio.h> int main() { int x = plus_10(40); printf("%d\n", x); retu...