二进制文件在计算机中的位置?当你打开电脑的时候,它指向生物,并通过它运行。我明白了。然后从某些东西(磁盘、闪存等)加载数据。但它会去哪里呢?二进制是以ram表示的吗?这是否意味着如果我的程序是2mb,而ram是32mb,我只能寻址30 my?我主要想知道这样我就能知道我的垃圾箱有多大。
我只是在这个问题上有点困惑。我知道这是具体的平台。但是一般来说,它会去哪里,一般来说,我会看什么文件来检查这些信息呢?
发布于 2014-07-14 11:09:35
二进制是以ram表示的吗?
在大多数系统上:是的。尽管在今天的许多系统中,物理RAM和处理器“相信它拥有”之间有一个额外的抽象层--正如另一个答案已经指出的,它被称为虚拟内存。因此,例如,如果您的机器拥有32 be的物理RAM,但64 be的虚拟内存,那么一旦运行的程序总共需要超过32 be,操作系统就会尝试将最近使用最少的物理内存区域“交换”到磁盘,并将需要立即从磁盘访问的内存加载到物理内存中。对于您的程序(包括机器上的其他程序),看起来好像有64 it的物理内存,而且当经常穿越32 it的边界时,事情变得非常慢。
这是否意味着如果我的程序是2mb,而ram是32mb,我只能寻址30 my?
假设您的程序的代码大小为2MB,并且您的系统只有32 2MB的内存(物理内存没有虚拟mem,或者32 2MB虚拟内存),这将为其他任何事情留下30 2MB的空间--您自己的程序的工作空间,以及同时运行的任何其他进程或程序的代码和工作内存。
一般来说,我要看什么文件来检查这些信息?
物理RAM的数量通常记录在您的系统硬件文档中(以及广告目录中,但实际上我不建议将它们作为一个严肃的参考)。虚拟RAM的数量通常可以在系统的设置中进行参数化。如果你想知道你的程序真正可以使用多少RAM,你必须用某种系统监视器来检查一个正在运行的系统,看看除了操作系统之外没有其他正在运行的进程时,有多少物理或虚拟内存仍然是空闲的。
发布于 2014-07-14 07:53:10
你的程序可以和你系统上的虚拟存储器一样大。要想得到更具体的答案,请提供更多的具体信息。你只是感兴趣吗?为嵌入式系统而挣扎?做作业?
发布于 2014-07-17 00:13:04
bios运行在rom上,它初始化dram,枚举pcie和许多其他事情。
然后,bios会在引导设备上找到您或某个程序,将其复制到ram中并在那里运行。
基本答案是肯定的,如果您有32 2mb,程序是2mb,那么堆和堆栈只剩下30 2mb。
首先必须设置和管理虚拟内存解决方案,但假设正在这样做,则可以访问虚拟内存空间的限制,或者虚拟内存空间(硬盘等)后面使用的媒体。如果您的程序是从引导加载程序加载的磁盘上运行的,那么您就没有虚拟内存,除非您自己实现它,所以在您的示例中限制在32 in。
根据编写代码的方式、全局变量与局部变量的关系、堆的使用与否,决定了您可以使用实际的二进制文件挖掘32 go中的多少,您将需要一些堆栈,但是您使用的局部变量越多,函数的嵌套程度越小,堆栈使用量就会大大增加。这可以用全局值来抵消,但也可以很快地吞噬掉您的ram (这些值很可能在您的“二进制”中被计算,并且是一个已知的数量与堆栈,这是相当动态的,尽管可以计算一些)。
https://softwareengineering.stackexchange.com/questions/249778
复制相似问题