23得票2回答
C++线程之间的内存共享

我刚接触C++中的多线程,并且试图清楚地了解线程之间内存如何共享/不共享。我正在使用C++11的std::thread。 根据我在其他SO问题上阅读到的信息,堆栈内存只属于一个线程,而堆内存是在线程之间共享的。因此,从我对堆栈和堆的理解来看,以下应该是正确的: #include <th...

16得票3回答
ARM:为什么在函数调用时需要推送/弹出两个寄存器?

我知道在函数调用开始时需要将链接寄存器压入堆栈,并在返回之前将该值弹出至程序计数器,以使执行能够从函数调用之前的位置继续。 但我不明白为什么大多数人会通过添加额外的寄存器来实现这一点。例如: push {ip, lr} ... pop {ip, pc} 例如,这是一段ARM汇编中的He...

9得票2回答
字节序与堆栈增长方向之间的关系

处理器的大小端模式和堆栈增长方向之间是否存在关联? 例如,x86架构是小端模式,堆栈向下增长(即在最高地址开始,并随着每次push操作向低地址增长)。同样,在大端模式的SPARC体系结构中,堆栈从最低地址开始向上增长到更高地址。 几乎所有体系结构都遵循这种关系模式。我相信这种不成文的约定必...

13得票3回答
垃圾回收 - 根节点

我最近阅读了关于垃圾回收的一些文章(主要是针对Java),但仍有一个问题未解答:JVM(或运行时系统)如何跟踪当前活动对象? 我理解这些对象是当前在堆栈上的对象,即所有局部变量或函数参数,这些都是对象。但这种方法的问题在于,每当运行时系统检查堆栈上的当前内容时,它如何区分引用变量和简单的整型...

10得票2回答
影子空间示例

编辑: 我已经接受了下面一个答案并添加了我的最终版本的代码。希望它展示给人们实际的影子空间分配示例,而不是更多的文字。 编辑2: 我还找到了一个链接到通话约定PDF的链接,在YouTube视频(所有东西中)的注释中有一些关于Linux上的影子空间和红色区域的有趣信息。它可以在这里找到:ht...

7得票3回答
C语言 - 没有使用malloc返回字符指针

请考虑以下代码: char* pointerTesting(void) { char* test = "hello"; return test; } int main() { char* string = pointerTesting(); printf("...

63得票4回答
Java基本类型是存储在堆栈还是堆中?

我知道非原始类型(对象)被放置在堆上,而方法则被放置在栈上,但是原始类型的变量呢? --更新 根据回答,我可以说堆可以为给定对象有一个新的栈和堆吗?鉴于该对象将具有原始类型和引用变量..?

16得票2回答
Java能在栈上分配列表吗?

每次我在Java中初始化一个列表时,我都会这样做:List<Integer> list = new LinkedList<>(); 我认为这将在堆上分配列表。不知道有没有办法在栈上分配列表?

27得票1回答
在Ruby中,堆栈上存储什么?

Ruby是否将所有内容都分配在堆上,还是有一些实例存储在栈上?我认为所有变量基本上都在栈上,并包含对堆上对象的透明引用。我的想法正确吗?这个实现是特定于某个版本的吗? 此外,如果情况是变量分配在栈上并仅包含隐藏指针,那么变量本身(忽略它们指向的对象)占用多少字节? 编辑: 之所以问这个问...

14得票4回答
Java中的数组保存在内存中的哪里?

如果我有一个函数,在该函数中声明:Object arr[] = new Object[20]; arr和整个数组存储在哪里?堆还是栈?声明是在某个函数中还是在main()中是否有影响?假设我还有以下命令行:arr[0] = new String("abc"); arr[1] = new Lis...