这里要抱歉一下,上周没有写, 理由就不找了,这里要强调的是,自我执行力确实很重要,这里逼迫自己,无论如何 ,每周抽出一小时的时间肯定是有的。so... 没有理由不坚持下去。
上周除了工作之外,主要都是在看《深入理解计算机系统》这本书,这本书很是不错,对于程序的每一个点都讲的很详细,确实是一本好书。
工作中发现的问题:
1、STL中,如vector中,如果你存储的是一个指针, 那么当这个指针的对象已经释放了的时候,你一定要在vector中将这个erase掉,因为此时这个指针依然存在,只是它所指的地方已经被释放,这样的话,这个指针就是一个随机数,会极大的破坏你的程序。
学习中的总结:
1、数值转换时需要注意的问题
低精度到高精度的装换:举例如下
short -----------> int short -----------------> unsigned
正数 没有变化 没有变换
负数 高位补1(算术拓展) 高位补0(逻辑拓展)
有符号 ------------------------------------------->无符号
正数 没有变化
负数 x+ 2的W次方
无符号 ------------------------------------------->有符号
当 0< x < 2的(W-1)次方时 没有变化
当 x< 0 时 加上 2的W次方
当 x >= 2的(w-1)次方 需要减去 2的w次方
注:w为当前计算机的位数,如32位、64位
一个经验,就是用数值的时候出现unsigned的类型时,如果出现减法,就一定要注意,否则会产生意想不到的错误。
2、汇编语言的一些基础
学习汇编主要是因为《深入理解计算机系统》的第三章:程序的机器级表示,这一章带你了解你写的程序(如C语言程序)在机器级代码中是如何展示的,关于学习汇编的原因会在第三章看完的时候(预定是下周)来总结,这里先介绍汇编的基础知识:
普及下一个基础知识,经常听到想i386、x86-64这样的术语,这些术语其实是cpu的类型,如i386是指intel的32位计算机系统,而x86-64是指inter在64位下对i386指令的拓展。所以这些i386、x86-64等等, 都是cpu的类型。
(1) 八个寄存器
eax、ecx、edx、ebx、esi、edi、esp、ebp
其中,前六个寄存器是存储数值等的寄存器,而esp是存放栈指针的,ebp是存储帧指针,这八个寄存器以后会在汇编语言中经常出现。
(2)指令操作符
寻址模式 格式 操作数值 名称 举例
立即数 $Imm Imm 立即数寻址 $4 代表数字4
寄存器 Ea R[Ea] 取寄存器的值 %eax
。。。。。。。。。。。。。
这里就不一一列举,详见《深入理解计算机系统》p113
(3)数据传送指令
movb、movw,movl 传送
movsbw、movsbl,movswl 传送符号拓展的字节
movzbw、movzbl、movzwl 传送零拓展的字节
(4)算术逻辑拓展
。。。。。。
由于还没有看完,我会在看完的时候来进行详解
加油!!!