11得票2回答
为什么GCC在栈上分配比对齐所需更多的空间?

我正在阅读一本以C代码为基础的汇编代码教材: C 代码:void echo() { char buf[8]; otherFunction(buf); } 汇编代码:echo: subq $24, %rsp //Allocate 24 bytes on stack, ...

13得票2回答
“pushl/popl %esp”的汇编级表示是什么?

我正在尝试理解推送和弹出堆栈指针寄存器的行为。在AT&T格式中: pushl %esp 并且 popl %esp 请注意,它们将计算出的值存回到%esp中。 我独立考虑这些指令,而不是按顺序。我知道存储在%esp中的值始终是增量/减量之前的值,但我该如何用汇编语言表示这种...

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

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

16得票3回答
ctime()函数返回一个字符串,为什么我们不需要释放这个字符串的内存?

函数ctime的原型是:char *ctime(const time_t *timep); 我们可以看到,它返回一个字符串。但是,这个字符串被包含在哪里呢? 为什么我们不应该释放这个字符串的内存。 这段示例代码会产生很多错误消息。char *p; p = ctime(...); ... f...

20得票4回答
Linux进程的堆栈大小是否有限制?

在Linux中,进程的堆栈大小是否有限制?这与机器的RAM有关吗? 我想知道这个问题是为了限制递归调用函数的深度。

11得票1回答
C#中的值类型数组存储在堆栈还是堆中?

可能重复: (C#)数组、堆和栈以及值类型 我正在尝试研究C#中内存分配的一些差异。 假设我有以下指令:int[] array = new int[512]; "array"是放在堆(heap)上吗?还是在栈(stack)上预留512个整数的空间?

23得票5回答
如何使用glibc的字符串实现在堆栈上分配std :: string?

int main(void) { std::string foo("foo"); } 据我理解,上述代码使用默认分配器调用new。因此,即使std::string foo在堆栈上分配,foo内部缓冲区也是在堆上分配的。 我该如何创建完全在堆栈上分配的字符串?

19得票1回答
其他线程的堆栈在进程虚拟地址空间中的哪里?

以下图片显示了Linux进程的虚拟地址空间中各部分的布局: 您可以看到只有一个堆栈section(因为我假设这个进程只有一个线程)。 但是如果该进程有另一个线程,那么第二个线程的堆栈将位于哪里?它会直接位于第一个堆栈下方吗?

144得票5回答
x86汇编中使用push/pop指令对寄存器的作用是什么?

阅读有关汇编语言的文章时,经常遇到人们写道他们将处理器的某个寄存器“push”一下,然后稍后再“pop”回来以恢复其先前的状态。 这是什么意思呢?如何将寄存器“push”起来?它被推到哪里去了?为什么需要这样做? 这是否简化为单个处理器指令,还是更加复杂?

155得票8回答
数组、堆、栈和值类型

int[] myIntegers; myIntegers = new int[100]; 在上面的代码中,new int[100] 是在堆上生成数组吗?从我在《CLR via C#》上阅读的内容来看,答案是肯定的。但我不理解的是,实际上数组内部的 int 元素会发生什么。由于它们是值类型,我猜...