C++——代码运行过程详解



#include <iostream>
using namespace std; int a = ;//初始化的全局变量:保存在数据段
char *p1;//未初始化的全局变量:保存在BSS段 int main()
{
int b;//未初始化的局部变量:保存在栈上
char s[] = "abc";//"abc"为字符串常量保存在常量区;数组保存在栈上,
并将常量区的"abc\0"复制到该数组中。这个数组可以随意修改而不会有任何隐患,
而""这个字符串依然会保留在静态区中。 char *p2;//p2保存在栈上
char *p3 = "";//p3保存在栈上,"123456\0"保存在data区的read-only部分
//注意:如果令p3[1] = 9; 则程序崩溃,指针可以访问但不允许改变常量区的内容
//声明了一个指针p3并指向"123456\0"在静态区中的地址,事实上,p3应该声明为
char const *,以免可以通过p3[i]='\n'这一类的语法去修改这个字符串的内容。如果这样
做了,在支持“常量区”的系统中可能会导致异常,在“合并相同字符串”的编译方法下会导致其它
地方的字符串常量古怪地发生变化。 static int c = ;//初始化的静态局部变量:保存在数据区(数据段) p1 = (char *)malloc(sizeof(char) * );//分配的10字节区域保存在堆上
p2 = (char *)malloc(sizeof(char) * );//分配的20字节区域保存在堆上 strcpy(p1, "");
//"123456\0"放在常量区,编译器可能会将它与p3所指向"123456"优化成一个地方 return ;
}
BSS段 :通常是指用来存放程序中 未初始化的全局变量、静态变量(全局变量未初始化时默认为0)的一块内存区域
数据段 :通常是指用来存放程序中 初始化后的全局变量和静态变量
代码段 :通常是指用来存放程序中 代码和常量
堆 :通常是指用来存放程序中 进程运行时被动态分配的内存段 ( 动态分配:malloc / new,者动态释放:free / delete)
栈 :通常是指用来存放程序中 用户临时创建的局部变量、函数形参、数组(局部变量未初始化则默认为垃圾值)
C++——代码运行过程详解的更多相关文章
- Java编译程序和运行过程详解
java整个编译以及运行的过程相当繁琐,我就举一个简单的例子说明: 编译原理简单过程:词法分析 --> 语法分析 --> 语义分析和中间代码生成 --> 优化 --> 目标代码 ...
- hive UDAF开发入门和运行过程详解(转)
介绍 hive的用户自定义聚合函数(UDAF)是一个很好的功能,集成了先进的数据处理.hive有两种UDAF:简单和通用.顾名思义,简单的UDAF,写的相当简单的,但因为使用Java反射导致性能损失, ...
- Servlet运行过程详解
比如,在浏览器地址栏输入http://ip:port/web01/hello step1,浏览器依据ip,port建立与servlet容器(容器同时也是一个简单的web服务器)之间的连接. step2 ...
- ASP.NET 运行时详解 揭开请求过程神秘面纱
对于ASP.NET开发,排在前五的话题离不开请求生命周期.像什么Cache.身份认证.Role管理.Routing映射,微软到底在请求过程中干了哪些隐秘的事,现在是时候揭晓了.抛开乌云见晴天,接下来就 ...
- Hadoop MapReduce执行过程详解(带hadoop例子)
https://my.oschina.net/itblog/blog/275294 摘要: 本文通过一个例子,详细介绍Hadoop 的 MapReduce过程. 分析MapReduce执行过程 Map ...
- cocos2dx-3.x 导出自定义类到 lua 过程详解
转载请注明出处:http://www.cnblogs.com/Ray1024 一.简介 最近正在学习cocos2d中的lua游戏开发,因为lua开发的热更新特性,大家开发游戏好像都会优先选择lua作为 ...
- ASP.NET运行时详解 集成模式和经典模式
遗留问题 在<ASP.NET运行时详解 生命周期入口分析>中遗留两个问题,包括Application的InitInternal方法执行细节.IIS6和II7经典模式请求管道管理类Appli ...
- 转载:C/C++源代码到可执行程序的过程详解
C/C++源代码到可执行程序的过程详解 编译,编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格 ...
- Android编译过程详解(一)
Android编译过程详解(一) 注:本文转载自Android编译过程详解(一):http://www.cnblogs.com/mr-raptor/archive/2012/06/07/2540359 ...
随机推荐
- docker 镜像导入导出[转]
0)查看镜像id sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE quay.io/calico/node v1.0.1 c70511a4 ...
- Spark的CombineByKey
combineBykey关键是要明白里面的三个函数: 1. 当某个key第一次出现的时候,走的是第一个函数(createCombin):A function that creates a combin ...
- centos6.6安装SVN服务器(2015/3/7)
一.安装#yum install subversion 判断是否安装成功 [root@]# svnserve --version有了SVN软件后还需要建立SVN库.#mkdir /opt/svn/ ...
- MOSS 2013研究系列---Win2008R2 建立域控时候,报密码不符合要求解决办法
今天远程给Win2008R2装AD域控的时候,突然报如下的错误页面: 修改了密码,将密码强度设置复杂了,但是,仍然会弹出这个错误页面,估计是因为远程账号的关系,于是再网上搜下了一下,找到了一个解决方案 ...
- STL容器——对map排序
STL容器(三)——对map排序 对于map的排序问题,主要分为两部分:根据key排序:根据value排序.下面我们就分别说一下~ 1. 根据key进行排序 map默认按照key进行升序排序 ,和输入 ...
- mac下的virtualbox启动失败处理
不知从哪个版本开始,mac下的virtualbox建立vm以后,启动就提示什么驱动没有加载,google后,解决如下 sudo /Library/Application\ Support/Virtua ...
- WebApi FormData+文件长传 异步+同步实现
// POST api/values public async Task Post() { try { // 检查该请求是否含有multipart/form-data if (!Request.Con ...
- jq 合并json对象
一,保存object1和2合并后产生新对象,若2中有与1相同的key,默认2将会覆盖1的值 1 var object = $.extend({}, object1, object2); 二,将2的值合 ...
- nginx限制请求之二:(ngx_http_limit_req_module)模块
相关文章: <高可用服务设计之二:Rate limiting 限流与降级> <nginx限制请求之一:(ngx_http_limit_conn_module)模块> <n ...
- Nmon、nmon analyse安装及使用
性能监控算是性能测试中的一部分,测试人员需要去分析各类系统指标,CPU.网络.内存.磁盘I/O等等.嗯.通常linux系统下有诸如top.netstat.iostat等命令进行查看:而有时需要看某数据 ...