V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  amiwrong123  ›  全部回复第 1 页 / 共 31 页
回复总数  605
1  2  3  4  5  6  7  8  9  10 ... 31  
@cpstar #2
你说的有点道理,不过感觉 CPU 处理有点麻烦阿,

因为自身的地址 0x0000_004A 是要作为无符号数的,然后操作数则要作为一个 有符号数 来处理(毕竟还可能向 第 9 个 bit 产生进位或借位)。
用错程序了。。
@ihciah #7
恕我孤陋寡闻,SDM 是什么,什么网址吗

看完这本书,我也想实现一遍 书里的程序。
@ssgong #6
@Nerv #8
意思好像理解了。看起来处理器好像在搞“特殊化”呢
- 处理页内偏移时,如果是普通的物理页,那么没有变化。
- 处理页内偏移时,如果是页目录表,那么需要对 页内偏移乘以 4 再相加。

但是感觉处理器好像没有这种“能力”做这种特殊化吧,处理器它是 怎么知道的呢。。
@WuSiYu
好像理解你意思,但是有点说不通呀。
首先,谁也没说这个虚拟地址,必须是四字节对齐的吧。
第二,假设必须虚拟地址四字节对齐。他也没必要让这个虚拟地址的低 12bit 先右移两位吧,然后到了算物理地址的时候,又要把这 12 个 bit 给左移两位回来==
为了防止内容不完整,我这里给出 这个巧妙过程的 全过程。下面贴图:
![]( https://s3.bmp.ovh/imgs/2022/12/23/03712a39c1313798.png)
@heiher #1
但好像不是呀,你能看到 括号里写的是 “做页用”。所以最后这图,已经是在 访问数据页了。

这个巧妙的用法也把我搞得有点晕了。。
@ihciah #3
原来 LDTR 寄存器里面有三个东西,segment selector, base linear address, limit

但好像还是不明白,这三个东西,既然已经有了 segment selector ,那还需要 base linear address, limit 干什么,毕竟一个段选择子指向一个段描述符,而一个段描述符其实就是包含了基地址和界限。
原来每个任务的 TCB 里面,有存 LDT 的基地址和界限。

但还是不知道 LDT 的段选择子是用来干啥的。而且 TCB 里面也有 LDT 的段选择子,奇怪了。
50 天前
回复了 Features 创建的主题 程序员 学习技术的遇到困境
还是得写笔记或者博客。
脑袋里的自以为的理解,和写出来的理解,是完全不一样的。至少对我来说是不一样的,可能我比较笨吧。
50 天前
回复了 Koral 创建的主题 生活 从程序员的岗位上离开三个多月了
以我的观点来看,老师如果没有编制,差别很大。就是也不清闲。而且现在要想拿到编制也很拿。

或者也可以去搞职称,但是 评职称也会因为学校的 关系户 而搞不上。
50 天前
回复了 amiwrong123 创建的主题 程序员 如何理解汇编伪指令 equ 的使用?
@chuckzhou #1
@chrawsl #3
OK ,理解了。所以说,标号的话,就是代表的是 变量的起始地址。
而$就是当前地址。

而且,我理解,那这个 equ 的一条汇编地址,感觉就和“C 语言里面#define” 一样,在实际编译出来的二进制不存在这条指令。

而且,进一步理解的话,那既然带 equ 的指令实际上不存在,那是不是说,在带 equ 的汇编指令里 使用符号$,其实是指 下一条不带 equ 的标号的地址(因为我代码没有给全,所以这条指令在帖子中 没有)。
96 天前
回复了 amiwrong123 创建的主题 C c 语言里面 #if 不可以这样用吗?
@jimmy980352 #9
嗯,你意思我理解了。留出一个#else...来保证编译到 int b;

不过我的目的是:用 打印日志等级 来控制一些打印。

正常来说,我那个程序会写成:
#if (current_log_level > log_level_error)
printf("error log\n");
#endif

但是我又发现这么写 好像不能起到控制编译的作用,实际效果是:我那么写 是永远不会被编译到。
96 天前
回复了 amiwrong123 创建的主题 C c 语言里面 #if 不可以这样用吗?
@overloadtanxxx2 #6
ok ,理解你的意思,总之,在#if 里面,不可以依赖这种全局变量的值,就算能依靠也是不可靠的
96 天前
回复了 amiwrong123 创建的主题 C c 语言里面 #if 不可以这样用吗?
@westoy #1
@overloadtanxxx2 #3
谢谢,我大概理解了,所以我这个程序正确的写法应该是把:
static const int current_log_level = log_level_info;
替换成
#define current_log_level 2

最好也把 枚举定义也替换成宏:
typedef enum {
log_level_error = 0,
log_level_warning = 1,
log_level_info = 2,
log_level_dbg = 3,
log_level_all = 4,
} my_log_level;
替换为
#define log_level_error 0
#define log_level_warning 1
#define log_level_info 2
#define log_level_dbg 3
#define log_level_all 4

应该是这样做吧
157 天前
回复了 amiwrong123 创建的主题 程序员 cache 中 写缓冲器不满的情况分析?
@nuk #4
从这一章之前的内容来看,这个写缓冲器的唯一作用就是 来临时存放 cache 里的被替换出的脏 cache 行 而已,之后写缓冲器也会将 cache 行 写入主存。
而且 现在 有缓外访问这个事,我都有点不理解了。因为我理解,访问都要经过 cache ,如果 cache 失效,那么进行 cache 行替换,再从 cache 里面访问。
@ScoutWang
因为现在还没有签合同。到时候可能因为别的原因,比如要签的合同上面有很坑的条目,而不签合同了。

话说这种承诺书是不是有撤销承诺一说,比如就像程序员正常离职时提前一个月告知公司,我也提前告知这个单位我要撤销承诺,可以这样吗
@PMR
外圈确实有数字。但书中内容也没有说,如果没去任职会有什么惩罚。不知道不去是不是真的会影响到诚信记录。
@TomatoYuyuko
如果没有花生酱可以用什么代替呀?
1  2  3  4  5  6  7  8  9  10 ... 31  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   实用小工具   ·   1080 人在线   最高记录 5497   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 55ms · UTC 01:57 · PVG 09:57 · LAX 17:57 · JFK 20:57
Developed with CodeLauncher
♥ Do have faith in what you're doing.