我需要知道何时将为特定程序分配内存.如何查看内存的分配位置.
你需要更具体的操作系统,如果它被解释或运行时编译(如PHP,JAVA,.NET等),可能需要语言.
但是,一般来说:
程序加载到内存时分配静态和全局变量.
当运行实例化它们的函数或块时,局部变量在堆栈上分配(有时是堆,取决于编译器).
程序中的其他点在创建对象时分配内存,在销毁对象时释放(显式或通过垃圾回收)
程序还可以通过malloc或类似的内存分配调用显式地为OS分配内存.
应该注意的是,即使已经为OS分配了内存,它实际上可能还没有被分配 - 操作系统在获取内存之前等待内存使用.内存分析器将帮助您了解给定进程的发生位置和时间.
分配内存的地方是一个更大的问题.有几点需要考虑:
程序的观点(通常是程序可以在不与其他程序冲突的情况下运行的扁平虚拟内存区域 - 在32位机器上大约4GB)
操作系统的观点,内存页面根据需要交换出来,因此程序可以假装它们有一个漂亮,扁平,未分段的内存区域
CPU的视角,内存是连续的
内存控制器的观点,它可能有两个512支和一个1GB的棒,中间有一个空插槽
您对哪种观点感到好奇?您是在编写在感兴趣的程序中运行的代码,与它共享内存,在同一操作系统上运行,在同一CPU上运行,还是将逻辑分析器连接到内存总线?
-亚当