系统级编程总结讲解.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
系统级编程总结讲解

复习提纲概念、选择题Data lab(lab 2)10个函数+注释位相关内容位,字节,字,进制相关内容(常识)%X 16进制形式输出整数,忽略0大端小端:例如0x9A0477F3 小端从低地址到高地址存储依次是(F3 77 04 9A)6种位操作运算符:~1补码,移位,与,|或,^异或数据的表示整数:原码1001 0010 反码(1’s):0110 1101 补码(2’s 反码+1):0110 1110负数等于正数的2’s (记住这句,就记住了整数表达方式,符号位只是标记)C语言是算数右移,保留符号位数据类型转换:大--小会丢失一部分,从而也可能引起符号的转变,小--大符号位会延展从而保留溢出overflow:危害是不会被检测,处理方法:判断sum是否小于其中某个值非整数:定点数(fixed point):用小数点分割二进制数,小数点的位置决定数大小BCD:十进制数用二进制表示IEEE Floating point: (–1)^s M 2^ES:符号位 M:小数点移动至最左的1后面的位置后的小数部分 E(真值) = Exp(机器表示(移码)) – Bias(偏移量) Bias = 2^(e-1) - 1, where e is number of exponent bits在float下e是8,即1位S,8位EXP,23位M编译器(记录员)与汇编器(翻译)的异同相同:将一种语言翻译成另一种不同:编译器是将高级语言翻译成机器语言,在此过程中需要分析和选择,高级语言往往和机器语言不是一一对应的,一条高级语言可能被翻译成多条低级语言而汇编器仅仅是将汇编语言翻译成机器语言,汇编语言往往和机器语言是一一对应的对齐(Alignment)(解释为什么?什么是?/给一段代码让你对齐)什么是:为了使CPU能够对变量进行快速的访问,变量的起始地址应该具有某些特性,即所谓的”对齐”. 比如4字节的int型,其起始地址应该位于4字节的边界上,即起始地址能够被4整除.为什么:字节对齐的作用不仅是便于cpu快速访问,同时合理的利用字节对齐可以有效地节省存储空间。对齐的例子:结构,算sizeof活动记录(code-画图,填空)stack pointer R --espframe pointer R --ebp什么是活动记录:The chunk of memory allocated for each function invocation活动记录创建过程:When a function is called, the compiler and hardware:caller :save contextpush parameters and the return address into the stackcallee: construct own Stack Frame push the frame pointer into the stack set the frame pointer equal to the stack pointerAllocate a chunk of memory to store the local state by decrement the stack pointer with an uncertain integer(Estimated by compiler according to the function content)Buffer overflow缓冲区溢出缓存:连续的一段内存空间缓存溢出:使用超出了缓存区的承载量,从而造成边界的覆盖6.2,6.3概念题,函数调用规范(参数,活动记录构造和析构)定义:常见类型及其区别:参数压栈顺序清理栈中参数_cdecl从右到左caller_stdcall / WINAPI从右到左calleePascal从左到右caller_fastcallPPT上没写PPT上没写_thiscallPPT上没写PPT上没写一些C的函数调用规范:动态内存分配:在程序运行时进行的内存分配,堆,栈十章后memory layout,动态,静态,栈,堆动态内存分配:在程序运行时进行的内存分配,堆,栈memory bug(四类),在code找错误Making and Using Bad References指针不初始化 2.修改指针要传指针的指针 3.只free没赋值NULL的野指针总之是指针的错误使用Overwriting Memory 1.数组访问越界 2.分配空间不够sizeof没考虑数据类型大小 3.字符串有\04.很隐秘的问题:Twice free两次free没啥说的Memory Leaks:the failure to deallocate (free) a block of memo

文档评论(0)

2299972 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档