你很烫吗?我很烫——关于栈区和静态存储区的思考
1.引言
相信经常用VC的朋友对屏幕输出的一大堆“烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫”不会陌生,但是也许会很奇怪,为什么会出现“烫”字呢?莫非改程序导致系统运行缓慢,发热过高???非也!下面解释一下,有错误的地方请指正:
如果逆向Debug模式下一个C程序,发现栈区开辟的存储空间都是使用0CCCCCCCCh来填充4字节单位的,也就是说,栈区开辟的存取局部变量的空间的每一个字节都被0xCC填充了。(为什么用0xCC,这个是int 3h的机器码,下断点用的)两个0xCC合起来输出时恰好对应中文“烫”字。
这也就不奇怪程序输出那么多“烫”了。
2.实例演示
实例一:
#include "stdafx.h"
#include <string.h>int _tmain(int argc, _TCHAR* argv[])
{char s[256] = {0}; // 定义一个数组memset(s, 0xCC, sizeof(s)); // 用0xCC填充printf("%s\n", s); // 输出return 1;
}
查看运行结果:
程序输出结果
实例二:
#include "stdafx.h"
#include <string.h>int _tmain(int argc, _TCHAR* argv[])
{char s[256]; // 系统默认用0xCC填充printf("%s\n", s); // 输出return 1;
}
程序输出还是”很烫“。
实例三:把字符数组定义为全局变量
#include "stdafx.h"
#include <string.h>char s[256]; // 全局变量int _tmain(int argc, _TCHAR* argv[])
{printf("%s\n", s); // 输出return 1;
}
这次系统输出了空,没有烫了!为什么???
其实,全局变量分配在”全局/静态存储区“中,局部变量分配在栈中,我们可以定义一个很大的数组,如果是局部的,会导致程序栈溢出,因为栈的空间大小是有限制的;而全局的则不会。
另外需要注意,这些”烫烫烫烫烫烫烫“现象只会在Debug模式中出现,在Release模式中不会出现。
如果你对”烫烫烫烫烫烫烫“表示很熟悉,那么”屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯“你见过吗?应该吧。我本人以前经常遇到”烫“,但很少遇到后者。
实例四:动态分配内存空间
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>int main(int argc, char* argv[])
{char *s = (char *)malloc(sizeof(char) * 256);puts(s);free(s);return 0;
}
运行程序,顿时满屏的”屯“字出现在眼前,有图有真相:
程序输出结果
因为,动态分配的空间开辟于堆,VC的Debug用0xCD填充堆的空间,两个0xCD和在一起就是屯了。
你很烫吗?我很烫——关于栈区和静态存储区的思考相关推荐
- 计算机在运行表格的时候很慢,打开excel很慢_EXCEL表格打开反应太慢时什么原因...
电脑打开excel很慢怎么办 1.Win+R,打开运行 2.输入regedit,打开注册表 3.HKEY_CLASSES_ROOT\Excel.Sheet.12\shell\Open (默认)和com ...
- 世界上有哪些代码量很少,但很牛逼很经典的算法或项目案例?
来自公众号:五分钟学算法 今天分享四个代码量很少,但很牛逼很经典的算法或项目案例. 1.no code 项目地址: https://github.com/kelseyhightower/nocode ...
- 美国诚实签经验——中英文行程单、往返机票、用英语面试的申请者通过率用中文面试的申请者的通过率、一直保持着微笑,看上去很自信,也很诚恳、户口簿带上最好...
在排队等待时据我的观察,用英语面试的申请者通过率>用中文面试的申请者的通过率.一家人申请通过率>单个人通过率:商务签证通过率>旅游签证通过率 一. 面签材料 1. 必备材 ...
- 【机器人】“市场很冷,从业者很拼” | 众多国内机器人厂商热议当前市场状态|人工智能...
导LEAD读 产品趋于同质,价格竞争白热化,制造业上下游共同挤压,风险投资愈发谨慎--在经历了近十年的快速发展之后,机器人产业在2018年遭遇了槛儿,业内企业感受到前所未有的压力. "市场很 ...
- java 跨平台很鸡肋,Mac 篇八:Mac上的这个软件看起来很鸡肋,其实很牛很强大
Mac 篇八:Mac上的这个软件看起来很鸡肋,其实很牛很强大 2019-11-26 11:37:36 8点赞 42收藏 1评论 用了很多年Mac,可能这个应用都没有注意到,看起来不起眼,其实用好它,不 ...
- jQuery Mobile使用中遇到的坑!填坑很难,但很有成就感。。
jQuery Mobile使用中遇到的坑!填坑很难,但很有成就感.. 最近参与到一个项目的前端开发中,为了提高用户体验使用到了jQuery Mobile.主要是用到了页面过渡效果,这种效果可以做到页面 ...
- 那些看来很朴实,却很有趣,很有爱的签名
那些看来很朴实,却很有趣,很有爱的签名 -----整理选摘自天涯论坛 11点半之后睡觉,果然会饿的. 理论上咱们都是文明人,给点面子萨. 就着红牛啃馒头,通宵干论文 不准再问我:最近过的怎么样?! 从 ...
- 【干货】《小群效应》徐志斌:亲密关系就是“超级信任”、“我很可亲”和“我很可爱”...
随着互联网飞速发展,公域流量的增长进入滞缓期,大到电商平台小到个体,都开始重视私域流量营销,一系列新工具和玩法层出不穷,"裂变营销"."超级用户"等热词也逐渐走 ...
- 中国美酷国际集团《创囧》逐梦很难但坚持很燃
以"逐梦很难但坚持很燃"为主题的微电影<创囧>系列之<曙光>自2018年12月17日开机以来,颇受多方关注.美酷<创囧>为什么这么受欢迎?究其原 ...
最新文章
- Delphi XE2 之 FireMonkey 入门(37) - 控件基础: TControl 概览
- proxychains 使用指北
- 提升 .NET 程序性能的 一些 原则
- centos根分区扩容方法linux公社,Centos5给/根分区扩容
- php支持二级域名共享,PHP二级域名session共享方案
- Java中static作用及用法详解
- ubuntu 下重装mysql若干问题
- Matplotlib 中文用户指南 3.1 pyplot 教程
- 成为一名专业的前端开发人员,需要学习什么?
- Jmeter下载安装配置
- 网上流行的经典马屁回帖
- 个人笔记-Nginx学习常见错误
- Java字符流拷贝/复制文本文件,字节流拷贝文本文件乱码,很经典简便
- Minimal Viable Plasma
- C# WinForm打开PDF文件
- Ae 表达式语言引用​:Comp
- 文本生成图像这么火,你需要了解这些技术的演变
- 创新、创业,风险投资介绍。附:2019年热门风险投资人 ( VCPE )
- 【青龙面板】返利好省
- 设计师必备!超好用的MAC电脑网页设计师软件