【发布时间】:2021-08-29 02:07:30
【问题描述】:
我正在尝试了解内存访问模式。我的问题很简单。谁决定内存访问模式?
- 我通过将参数提供给
gcc来决定我的程序的模式。因此,我可以根据我的代码进行设置。 - 我的操作系统决定了内存访问模式。因此,我无法为我的任何程序更改它。
- 我的 CPU 决定使用哪种内存访问模式。因此,我的 PC 上运行的任何操作系统都使用该模式。
【问题讨论】:
-
取决于你所说的记忆模式。 CPU 硬件能够处理物理内存访问和到这些物理页面的虚拟内存映射。操作系统将分配物理页面并对虚拟内存页表进行编程。当你 malloc 时,你会得到一个线性的虚拟内存范围,后面可能有分散的物理页面。一般来说,HW是how,OS是what,app只是OS提供的用户
-
每当我让 CPU 访问内存时,由于我的代码实现,我想使用最近邻内存访问模式。是否可以?另一种方法是,在运行我的程序之前,我怎么知道将使用哪种模式?我是新手,如果我的问题很垃圾,请见谅。
-
看来您实际上是在寻找算法,与 CPU/OS/Compile 标志无关。您必须使用数组将其实现为算法,例如我在 SO:stackoverflow.com/questions/7862190/… 您将数据放入一个或多个数组中,并以您理解的某种结构组织它,这样您就可以走最近的邻居。
-
除非您访问的数据驻留在单个内存页面中,否则您无法保证程序的实际物理内存访问模式,因为操作系统可以在物理内存中的任何位置分配您的虚拟内存。见here
标签: gcc memory operating-system cpu memory-access