如果您查看某个抽象级别,那么一切都清楚了,我们向操作系统请求内存,它为我们分配一定大小的页面并发送它们的地址。
问题是它如何在更深层次上运作。
- 我们启动了一个新进程(原谅编译的二进制文件),操作系统已经为其分配了地址,它在什么时候分配它们?我们能得到所有这些地址吗?供您内部使用。
- 在我们收到地址后,我是否正确理解我们不再需要访问操作系统并且我们将从程序本身内部的内部堆栈中获取这些地址来控制它?
- 如果在某个时候我们运行 python\golang 垃圾收集器,它会将内存释放回操作系统,还是仅在应用程序内部释放它以供重用?那些。实际上,它只是简单地将内存页的地址返回到进程的内部堆栈,其中存储了您可以写东西的地址?
我在很多很多年前处理过这些问题,所以也许现在出现了一些更新的东西,但尽管如此。
如果你真的想了解其中的原理,那么你不应该从论坛上的问题开始,而是从阅读基础书籍开始。好吧,例如,许多代程序员一直在从一本书中学习
尽管这本书并不新鲜,但其中的原则是几十年来从未改变过的原则。一般来说 - 我强烈推荐。
此外,当您了解基础时,您需要了解“它”在特定操作系统中是如何工作的。因此,对于 Windows 家族的系统,您可以通过 WinAPI 关键字找到它。不同作者对 Windows 系统中的内存分配工作进行了描述。好吧,例如:
很多东西都可以在 Microsoft 网站上找到。但无论如何,我强调,如果你不先掌握“基础”,你将不会理解以上任何一个来源。我并不无聊,只是多年的经验,无论是在系统编程的实际工作中还是在教学中,包括正在考虑的问题。
由于内存管理是任何操作系统的最内部层之一,首先,为了直接查看“那里有什么以及如何”,您必须首先掌握黑客技术。从如何在“内核”模式下运行某些东西开始。以及系统调用级别的工作原理。但至少在上面的书中你可以(如果可以的话)使用 C++。(因为最初访问仅在汇编程序级别,所以 API 被“提高”了一点)。一般来说,查看来源,然后在您有(或失去)兴趣时深入了解。
至于 Linux / Android 等,我也遇到过类似的来源,只是当问题对我失去相关性时,他们已经遇到了我。但是如果你需要搜索——关键词是“系统调用”、“(低级)内存管理”、“内存虚拟化”等。
祝你好运。