分配的内存和保留的内存有啥区别?

Posted

技术标签:

【中文标题】分配的内存和保留的内存有啥区别?【英文标题】:what is the difference between allocated and reserved memory?分配的内存和保留的内存有什么区别? 【发布时间】:2020-08-12 22:32:33 【问题描述】:

作为一个学习嵌入式软件的初学者,我无法理解保留内存和分配内存之间的细微差别,有人可以帮助我吗?

【问题讨论】:

在 C 或 C++ 中没有保留内存之类的东西。你能举个例子说明你指的是什么吗? 这可能是指“静态分配”与“动态分配”。您使用的措辞非常规。这是C ++“教授”正在做的事情吗?他们经常发明自己的高度特殊的术语。 我正在尝试从有此段落的在线课程中学习:" _Stack 由编译器自动使用,而编译器又利用特定于体系结构的进程和指令来调用和从例程返回. 所有这些操作都被编译到函数调用中。仍然有开销,为了调用和从函数返回,堆栈的内存区域占用了部分数据内存。这是在编译时保留的,已分配在运行时,与该区域交互的操作在编译时引入。 您的参考文本似乎描述了您的“交叉”编译器为您的嵌入式系统生成的代码的某些方面。研究主题:bsp(板级支持包)。 “板级支持包 (BSP) 是给定计算机硬件设备的基本代码代码,它将使该设备与计算机的操作系统(操作系统)一起工作。BSP 包含一个称为引导加载程序或引导管理器的小程序,用于放置操作系统和设备驱动程序进入内存”BSP 问题可能不是 C++ 语法问题。我见过的 bsp 是 assy、c 和 c++ 的混合体。 @Barmar:C 中有保留内存之类的东西。它是为对象提供的存储空间——任何对象。例如,C 2018 6.2.4 2 表示“对象的 生命周期 是程序执行的一部分,在此期间保证为它保留存储空间……” 【参考方案1】:

在您引用的段落中,他们只是在谈论调用堆栈(这是可能的内存类型之一)。

调用堆栈的最大大小是在编译时“保留”的,但在程序启动时它大部分是未使用的。当你进行函数调用时,你的局部变量和函数调用会被压入堆栈——这会暂时“分配”内存直到函数返回——然后它被“释放”。

如果你分配的内存比你保留的多——例如无限递归,那么你的程序将有一个......

堆栈溢出错误。

【讨论】:

以上是关于分配的内存和保留的内存有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

引用传递和动态内存分配之间有啥区别[关闭]

Malloc 和 new 运算符分配内存有啥区别? [复制]

Malloc 和 new 运算符分配内存有啥区别? [复制]

Android:浅堆和保留堆有啥区别

Object Mat(args); 之间有啥区别 - 明智的内存分配和对象 *Mat = new Mat(args);在 C++ 中? [复制]

内存竞技场和内存池有啥区别?