我的意思是,如果它始终为真,则首先使用较低的地址,然后递增地址以访问较高的地址。可以颠倒顺序吗?
答案1
您还没有指定确切的上下文。但这对于大多数典型情况都可以回答(例如 x86):
- 保留一些初始地址空间,以防止 NULL 指针取消引用时的内存访问。
- 然后,内存根据进程启动细节进行分配,并且可以在运行时加载程序、其数据、主二进制文件、其数据等之间混合 - 所有这些通常都是通过 VM 页面大小步骤递增来分配的。
- 然后,使用一大块区域来放置动态库、基于页的堆分配等——再次递增分配。但是,如果程序是多线程的,它将分配以相反顺序提交的线程堆栈(对于大多数处理器,包括 x86)。
- 然后,可以对堆使用基于 sbrk 的顺序分配。
- 然后,放置主线程堆栈。它的分配可能以相反的顺序提交(见上文)。
- 然后,放置内核区;应用程序应该知道的唯一一件事是,未经明确许可,它不得访问该区域。
因此,您可能会在几乎每个程序中看到双向分配。
这在其他架构上可能有所不同。