ech*_*hmi 0 c memory computer-science
我很想知道“内存”到底代表什么。
当我编译并执行此代码时:
#include <stdio.h>
int main(void)
{
int n = 50;
printf("%p\n", &n);
}
Run Code Online (Sandbox Code Playgroud)
正如我们所知,我们得到一个十六进制输出,如:
0x7ffeee63dabc
Run Code Online (Sandbox Code Playgroud)
该十六进制地址在物理上代表什么?它是我计算机 L1 缓存的一部分吗?内存?固态硬盘?
我在哪里可以阅读更多关于此的信息,任何参考资料都会有所帮助。谢谢你。
一些背景: 经过几年的休息,我最近重新开始学习计算机科学(我在该行业担任低代码/无代码 Web 开发人员)并意识到我想要的知识存在一些差距上色。
在学习 C(通过CS50x)时,我正处于Memory的一周。我意识到我实际上并不知道这指的是什么 Memory。该课程要么假设学生已经知道这一点,要么假设它与本课程的上下文无关(这是一门介绍课程,因此抽象是有意义的,以避免陷入困境),但我很好奇,我会喜欢去追寻答案。
C 不想让你知道所有这些东西。
C 是一组关于如何编写程序和不编写程序的规则。设计 C 的人不想解释所有这些东西,所以他们制定了关于你可以用指针做什么和不能做什么的规则,这就是它的结束。
例如,该语言不了解虚拟内存,因为并非所有类型的计算机都有虚拟内存。洗碗机或微波炉对它没有用处,这将是浪费金钱。
该十六进制地址在物理上代表什么?它是我计算机 L1 缓存的一部分吗?内存?固态硬盘?
地址 0x7ffeee63dabc 表示虚拟页面 0x7ffeee63d 中的地址 0xabc。它现在可能在您的 SSD 上或在 RAM 中;如果您访问它,那么它必须进入 RAM。它目前也可能在缓存中,但没有好的方法可以分辨。无论它去哪里,地址都不会改变。