关于C/C++的堆栈分配

33 浏览
0 Comments

关于C/C++的堆栈分配

在学习C++(和C)时,我有一些关于堆栈分配工作的特殊疑问,我无法找到解决方法:

  1. 堆栈分配是否隐式调用malloc/free函数?如果不是,则如何确保堆栈分配和堆分配之间没有冲突?
  2. 如果堆栈分配隐式调用了new/delete,那么C++中的堆栈分配是否就隐式地调用了new/delete?如果是,那么对一个类重载new运算符是否会影响它的堆栈分配?

在VC++中产生了混淆的结果,但是由于VC++并不完全符合标准(或者我听说过),我决定在这里问问...

admin 更改状态以发布 2023年5月21日
0
0 Comments

你第一个问题的答案是不。堆栈根本没有从堆内分配。

你应该先阅读什么是堆和栈,它们在哪里以了解基本概念。

0
0 Comments

栈分配不使用像malloc/free这样的东西。它使用一个被称为程序堆栈的内存块,它只是一个连续的内存段。

有一个特殊的寄存器用于存储栈的顶部。当在栈上创建一个新对象时,顶部升高,从而增加栈的大小;当对象被解除分配(超出作用域)时,顶部降低,从而减小栈的大小。

如果您尝试在栈上分配一个过大的对象或在递归时进入太深,顶部将超出允许的栈的最大大小,这称为堆栈溢出。

注意:栈增长的实际方向(地址的增加或减少)将因系统而异,但总体思想是相同的,无论实际方向如何。

0