相关疑难解决方法(0)

什么会导致C++中的分段错误?

我注意到C++中的分段错误的常见原因列表没有问题,所以我想我会添加它.

自然它是社区维基,因为没有一个正确的答案.

我认为这对于学习C++的新程序员可能有用,如果你不同意,可以随意关闭它.

c++ segmentation-fault

41
推荐指数
3
解决办法
4万
查看次数

内存映射显示的RAM多于物理上可用的RAM

我正在研究一个小的x86内核.我正在访问并尝试读取GRUB在多重引导标头中提供的内存映射.我有一个Intel i3 cpu和4 GiB的RAM.在这台机器上运行时,我正在阅读以下内存映射:

 --Base Address--          --Length--      --Type--

0x0000000000000000     0x000000000009d000     0x1
0x000000000009d000     0x0000000000003000     0x2
0x00000000000e0000     0x0000000000020000     0x2
0x0000000000100000     0x00000000bb53f000     0x1
0x00000000bb63f000     0x0000000000080000     0x2
0x00000000bb6bf000     0x0000000000100000     0x4
0x00000000bb7bf000     0x0000000000040000     0x3
0x00000000bb7ff000     0x0000000000001000     0x1
0x00000000bb800000     0x0000000004800000     0x2
0x00000000e0000000     0x0000000010000000     0x2
0x00000000feb00000     0x0000000000004000     0x2
0x00000000fec00000     0x0000000000001000     0x2
0x00000000fed10000     0x0000000000004000     0x2
0x00000000fed18000     0x0000000000002000     0x2
0x00000000fed1b000     0x0000000000005000     0x2
0x00000000fee00000     0x0000000000001000     0x2
0x00000000ffe80000     0x0000000000180000     0x2
0x0000000100000000     0x0000000038000000     0x1
Run Code Online (Sandbox Code Playgroud)

当我总计可用的内存区域时,我得到......

0x1(可用) - 3893.8 MiB

这似乎是正确的,留下最后的200米MiB保留给其他设备.唯一的问题是其他内存类型的总数:

0x2,0x3,0x4 - 331.5 MiB

将我的RAM总量设置为4225.3 MiB或略高于4.1 GiB,这引出了我的问题:

  1. 当我只安装了4GiB时,为什么总计超过4GiB的RAM?

  2. 为什么内存映射中的最后一个基址是0x0000000100000000?只有4GiB的RAM,32位应该是解决所有内容所需的最大地址大小.我在这里误解了什么吗?

c memory operating-system memory-management osdev

7
推荐指数
1
解决办法
1638
查看次数