首页 > 解决方案 > 为什么将数据填充到缓冲区中从低地址到高地址

问题描述

当我们调用一个函数时,它的栈是这样的:

LOW MEMORY ADDRESS
localvariables
saved frame pointer
return address
.... 
HIGH MEMORY ADDRESS

为什么它将数据填充到缓冲区中,方向是从低内存地址到高内存地址?

很多人告诉我:“因为这就是它的工作原理”,但我认为某本书或其他书中有人写过为什么我们会有这种行为,但我无法找到一个好的资源。

标签: memory-address

解决方案


我认为您误解或混淆了一些事情。

  1. 在您的示例中,您似乎将操作系统功能与程序和编译器操作混为一谈。

如果分配多个内存地址,总会有一个低地址和一个高地址。您只能通过将所有内容写入相同的地址来更改它,这可能会导致程序非常有限或无用。

  1. 有许多缓冲区实现,具体取决于您的编程语言、框架……

你选择哪一个取决于你,如果你使用已经在库中实现的缓冲区,当然你必须遵循这个缓冲区添加数据的规则,因为这就是这个特定缓冲区的工作方式。如果您对这样做的方式不满意,则需要更改所选缓冲区甚至整个库,或者在极端情况下编写自己的缓冲区。

  1. 如何将数据添加到缓冲区

某些缓冲区允许您在缓冲区中的任何位置添加数据,但会以性能或可靠性为代价。如果你想这样做,这取决于你。


推荐阅读