打印本页内容

什么是C ++“堆栈”?

 点击:次  发布日期:2019-10-15 16:19    发布人:365bet足球现金网

全部展开
努力思考是件好事,但是您的理解显然被误解了。
堆栈的表面意味着许多人说实现细节很深。让我们谈谈我的理解。
首先,堆栈实现不是物理实现。没有专门设计电池的计算机设计。您需要提供什么计算机?
记忆体
从计算机设计师那里,他们给计算机留下了记忆。您需要知道2GB4GB或8GB每个内存都有一个地址。
然后他知道,如果不接触硬件,那么他通常接触的地址就是物理地址。例如,如果您有一个指向地址0x12345的指针,则不要假定它是相应内存中的地址。实际上,该地址只是一个虚拟地址。该地址的实际答复是什么?那就是操作系统。操作系统内存管理单元负责分配内存。例如,如果操作系统知道实内存0x23456是不活动的,则将0x12345分配给0x23456。这称为内存分配。
接下来,您需要知道对于每个正在运行的进程,操作系统都不会与4GB的软件内存冲突,无论实际内存是2GB还是8GB。
每个软件都需要知道它可以使用1-4GB的内存地址。对于与操作系统物理相关的事物,我们保证操作系统不是独立的。此实现非常简单。
如果您了解上述内容,则可以说是堆栈。
堆栈是内存的一部分,但是其实现是无法理解的。说您能理解。在汇编代码级别,这是无法理解的逻辑。也许这只是组装过程中的一个步骤。代码中有很多指令,并且计算机中有很多记录(您知道它是什么),尤其是堆栈顶部的ebp地址显示了堆栈底部的部件地址。
两个推送指令意味着它们需要堆叠在一起。换句话说,esp -4pop的值表示esp + 4电池有其自己的电池。例如,最主要的是堆栈,然后将function1函数称为堆栈,但这些不是分布式电池。它们实际上是相邻的地址。为了区分它们,只需在每个程序堆栈的顶部进行注册。
当此功能结束时,刚使用完电池并创建了呼叫电池(电池算法可以执行此操作)。
但是堆栈的地址到底是什么?实际上,堆栈仅需要初始地址。之后,地址值根据需要逐渐减小,并且所需数量减小。如果需要太多,电池将耗尽。
创建堆栈的人员需要了解了解充电器所需的PE文件。双击一个。
为什么EXE文件显示它正在运行?
操作系统首先分配4 GB的内存和其他初始化,并在此过程中创建一个堆栈。
全部由充电器完成。
我不太了解充电器。我从未见过一个名为Load的程序。
因此,必须使用动态链接来实现加载程序,并且没有特定的程序。
最后,发表您的意见。您不必那么深。如果没有基地,看到基地可能会感到困惑。建议您从一开始就检查操作系统的工作方式。
PD:我说的是窗户。