- 1、本文档共49页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
可以少传一个参数吗? UNICODE_STRING字符串 注意如果UNICODE字符串中有N个字符,则Length等于2N。 UNICODE_STRING字符串不以空字符结尾,长度靠Length字段表示。 typedef struct _UNICODE_STRING { USHORT Length; // 字符串长度,单位是字节 USHORT MaximumLength; // 字符串缓冲区的最大长度 PWSTR Buffer; // 缓冲区指针 } UNICODE_STRING; 谨慎处理字符串缓冲区 UNICODE_STRING str; wcscpy(str.Buffer, L”my first string!”); str.Length = str.MaximumLength = wcslen(L”my first string!”)*sizeof(WCHAR); UNICODE_STRING str; str.Buffer = L”my first string”; str.Length = str.MaximumLength = wcslen(L”my first string!”)*sizeof(WCHAR); 正确的例子: 错误的例子: 为什么有时相同有时不同? 12 15 12 12 改成char a[10]; 会输出什么? 堆内存管理方法初探 int *p1 = (int*) malloc(sizeof(int)); char *p2 = (char*) malloc(sizeof(char)); …… free(p1) ; free(p2); 1000 大 基地址 长度 1000 100 自由内存区表 基地址 长度 占用内存区表 C 语言的深度挖掘 C程序中的内存管理问题 C/C++程序运行时的内存结构 全局变量、用static修饰的局部变量都存储在静态数据区。 程序指令和大部分字面常量都存储在代码区。 大部分函数的形参和局部变量都存储在栈区。 程序中动态分配的内存都存储在堆区。 一小部分函数形参和局部变量存储在CPU寄存器组中。 静态数据区 代码区 栈区 堆区 CPU寄存器组 常量数据区 已初始化区 未初始化区 变量的生存期 把程序运行时一个变量占有内存空间的时间段称为该变量的生存期。C++把变量的生存期分为:静态、自动和动态三种。 静态生存期:全局变量都具有静态生存期,它们的内存空间从程序开始执行时就进行分配,直到程序结束才被收回。 自动生存期:局部变量和函数形参一般都具有自动生存期,它们的内存空间在程序执行到定义它们的复合语句(包括函数体)时才分配,当定义它们的复合语句执行结束时内存被收回。 动态生存期:具有动态生存期的变量的生存时间是由程序员自由控制的,其内存空间用new操作符分配,用delete回收。 在定义局部变量时,可以为它们加上存储类修饰符auto、static和register来指出它们的生存期。 定义为static存储类型的局部变量具有静态生存期,它们也被存放在静态数据区。 关键字volatile的作用 main函数为空居然也有输出? 关键字extern的作用 错了! 系统栈与过程调用 局部变量 var_main 参数 arg_A2 = 1 返回地址 其他信息 局部变量 var_A2 参数 arg_B2=3 返回地址 其他信息 局部变量 var_A1 局部变量 var_B2 …. 局部变量 var_B1 …. 栈底 栈顶 参数arg_A1= 2 参数 arg_B1=4 func_B 的栈帧 func_A 的栈帧 main 的栈帧 CPU对过程调用的支持 相关的寄存器: ESP:存放一个指针,该指针指向系统栈最上面一个栈帧的栈顶,即整个系统栈的栈顶。 EBP:存放一个指针,该指针指向系统栈最上面一个栈帧的栈底,即当前栈帧的栈底。有时也被称为栈帧寄存器。 EIP:指令寄存器,存放一个指针,指向下一条等待执行的指令地址。 相关的机器指令: push operand sub ESP, 1 ; mov [ESP], operand ; pop operand mov operand, [ESP] ; add ESP, 1 ; call Label push EIP ; jmp Label ; call operand push EIP ; jmp operand; ret pop EIP ; 保存上层函数的栈帧EBP 回收局部变量占用的空间 为局部变量分配空间 参数y = 5 参数x = g 返回地址 上层函数的栈帧EBP 局部变量a 局部变量b EBP ESP 地址高端 地址低端 注:图中每个
您可能关注的文档
- 2010届高考数学二轮复习系列课件07《二轮复习-极限、导数解答题的解法》 .ppt
- 2010届高考数学复习强化双基系列课件__《统计》 .ppt
- 2010年3月普通高等学校招生浙江省统一考试信息技术试题解析 .ppt
- 2010年国内高端俱乐部分享.ppt
- 2011大学生就业指导课件-面试2.ppt
- 2011高考二轮复习文科数学专题六+1第一讲 直线与圆 .ppt
- 2011高考物理一轮复习典例精析课件:第一章+运动的描述+匀速直线运动(可编辑文字版) .ppt
- 2011届高考化学第一轮专题复习课件10.ppt
- 2011届生物高考二轮复习+第2部分+专题3+第1讲 理解能力考查题.ppt
- 2011年地方税收新政策盘点(PPT) .ppt
文档评论(0)