【发布时间】:2018-11-20 22:39:06
【问题描述】:
我正在研究 Pintos 第 4 部分,特别是用于 inode 数据结构的间接块。该块应该有 (512 / 4) = 128 个整数,指的是其中的其他磁盘扇区。我在我的 c 程序中做了一个小模拟,将模拟扇区写入 malloc 的模拟扇区,然后将其读回。为什么钥匙这么大?为什么不是 0、1、2、3、4。
#include <stdio.h>
#include <inttypes.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
void *mock_sector = malloc(512);
for (uint32_t i = 0; i < 20; i++) {
memset(mock_sector + i * sizeof(uint32_t), i, sizeof(uint32_t));
}
uint32_t key;
for (uint32_t i = 0; i < 20; i++) {
memcpy(&key, mock_sector + i * sizeof(uint32_t), sizeof(uint32_t));
printf("Key is: %d\n", key);
}
return 0;
}
结果->
Key is: 0
Key is: 16843009
Key is: 33686018
Key is: 50529027
Key is: 67372036
Key is: 84215045
Key is: 101058054
Key is: 117901063
Key is: 134744072
Key is: 151587081
Key is: 168430090
Key is: 185273099
Key is: 202116108
Key is: 218959117
Key is: 235802126
Key is: 252645135
Key is: 269488144
Key is: 286331153
Key is: 303174162
Key is: 320017171
我什至可以看到我调用 memset 的地址正在增加。
0x18aa010 0x18aa014 0x18aa018 0x18aa01c 0x18aa020 0x18aa024 0x18aa028 0x18aa02c
【问题讨论】:
-
但是您将数字的每个 byte 分配为等于
(char)i。所以第一个数字是 0x00000000,第二个是 0x01010101,依此类推。 -
你的 memset:不应该是
memset(mock_sector,0,sizeof *mock_sector);吗?并且没有 for 循环! -
你为什么使用空指针?
标签: c