memory-address - 为什么将数据填充到缓冲区中从低地址到高地址
问题描述
当我们调用一个函数时,它的栈是这样的:
LOW MEMORY ADDRESS
localvariables
saved frame pointer
return address
....
HIGH MEMORY ADDRESS
为什么它将数据填充到缓冲区中,方向是从低内存地址到高内存地址?
很多人告诉我:“因为这就是它的工作原理”,但我认为某本书或其他书中有人写过为什么我们会有这种行为,但我无法找到一个好的资源。
解决方案
我认为您误解或混淆了一些事情。
- 在您的示例中,您似乎将操作系统功能与程序和编译器操作混为一谈。
如果分配多个内存地址,总会有一个低地址和一个高地址。您只能通过将所有内容写入相同的地址来更改它,这可能会导致程序非常有限或无用。
- 有许多缓冲区实现,具体取决于您的编程语言、框架……
你选择哪一个取决于你,如果你使用已经在库中实现的缓冲区,当然你必须遵循这个缓冲区添加数据的规则,因为这就是这个特定缓冲区的工作方式。如果您对这样做的方式不满意,则需要更改所选缓冲区甚至整个库,或者在极端情况下编写自己的缓冲区。
- 如何将数据添加到缓冲区
某些缓冲区允许您在缓冲区中的任何位置添加数据,但会以性能或可靠性为代价。如果你想这样做,这取决于你。
推荐阅读
- ffmpeg - 为什么当某些类型的数据包进入输入流时ffmpeg h264解码器停止解码?
- bootstrap-vue - 自定义 bootstrap-vue 组件
- c# - 在哪里验证 ASP.Net Core 应用程序中的 AutoMapper 配置?
- python - 使 Python 中的 C++ 函数超时
- macos - 在 MacOS High Sierra 上从 C/C++ 源构建 Tensorflow 1.8 的错误
- python - 如何在回溯中仅使用 runTest 和 newfunc 来跟踪鼻子测试错误/失败的来源?
- swift - Swift:解析服务器检索数据范围 10...20
- azure - Azure AKS 静态 IP 地址
- jboss - 从另一个 EAR 部署 jar
- android - Firebase 身份验证:无论我尝试什么,身份验证都失败了电子邮件和密码