我无法理解页面大小和页表条目大小之间的区别。
根据我的理解,Page size 用于将 Page 表等分。称为 Pages 和相同大小的块用于将主内存划分为帧。
页面大小 = 帧大小。
对不起,绘画技巧不佳。这是我对页表的可视化
其中页表条目大小是每个页面条目占用的大小。所以,
页表条目大小 = 页大小。
但是页表条目大小是通过帧号中的位数来计算的。
谁能解释一下页面大小与页表条目大小的区别?为什么页表条目大小是根据帧中的位数而不是页来计算的?
请帮助我想象页表与上述所有组件的精确程度
当我在 64 位机器上运行此代码时:
?#?include ?<stdio.h>
int main()
{
int a[10];
printf("%p",&a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它输出:
0x7fffe9ebf984 (14 digits)
Run Code Online (Sandbox Code Playgroud)
在一本教科书中,我发现了这个:
我的电脑的内存地址是 32 位的,用八位十六进制数字表示。
我的问题是:
为什么 32 位和 64 位地址有两种不同的长度?
32 位地址如何用 8 位数字表示,64 位数字如何用 14 位数字表示?
我开始阅读指针,同时修补它们.我偶然发现了这个:
#include<stdio.h>
int main()
{
int *p,a;
a=sizeof(*p);
printf("%d",a);
}
Run Code Online (Sandbox Code Playgroud)
它输出:4
然后在sizeof(*p)
我用它取代它的地方sizeof(int*)
输出8.
P是整数类型的指针,int*也是同一个东西(我的假设是正确的吗?).那么为什么它会打印两个不同的值.我在64位gcc编译器上这样做.
我正在尝试实现一个 PathLike 对象并使用 fspath 命令从fspath函数中检索 o/p 。
我期望的是,如果 PathLike 对象被传递给 fspath 函数,它应该返回fspath的值(这里它应该以字节为单位返回路径)。但是,它仍然在 str 中返回。
import os,pathlib
class imp(os.PathLike):
def __init__(self,path):
self.path=path
def __fspath__(path):
return bytes(path)
re=imp('/etc/')
print(os.fspath(re.path))
Output: '/etc/'
Expected output : b '/etc/'
Run Code Online (Sandbox Code Playgroud)
你能告诉我我哪里出错了,我应该如何更改代码以使其按预期工作?
c ×2
filesystems ×1
hardware ×1
memory ×1
page-tables ×1
parsing ×1
path ×1
pointers ×1
python ×1