2013 0317

来源:互联网 发布:欧盟个人数据保护指令 编辑:程序博客网 时间:2024/05/16 11:58

  这里要抱歉一下,上周没有写, 理由就不找了,这里要强调的是,自我执行力确实很重要,这里逼迫自己,无论如何 ,每周抽出一小时的时间肯定是有的。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)算术逻辑拓展

   。。。。。。


由于还没有看完,我会在看完的时候来进行详解


加油!!!