const的小把戏。
const修饰不同的变量,会存放在不同的段,会得到不同的结果。
结论:const修饰初始化全局变量,数据存放在rodata段,不可被修改。
const修饰未初始化全局变量,数据存放在bss段,可用指针修改。
const修饰局部变量,数据存放在stack段,可用指针修改。
const修饰指向堆的指针,数据存放在heap段,可以用指针修改。
论证方法:
# include <stdio.h> # include <stdlib.h>const int a = 10;int main(void) {int *p = &a;*p = 20;printf("%d\n", a);return 0; }
结果:编译警告,执行段错误。
objdump -t a.o
可以看到,cosnt int a在rodata段
# include <stdio.h> # include <stdlib.h>const int a;int main(void) {int *p = &a;*p = 20;printf("%d\n", a);return 0; }
执行结果:编译警告,运行正常,输出20
可以看出,a只是一个COMMON符号,不属于任何段。再用objdump看下a.out
可以看出,a在bss段
# include <stdio.h> # include <stdlib.h>int main(void) {const int a = 10;int *p = &a;*p = 20;printf("%d\n", a);return 0; }
运行结果:编译警告,执行正常,输出20
未找到a,说明a不在rodata段中,也不再bss段中。gdb看下栈帧
由此可看出,a存在栈上。
# include <stdio.h> # include <stdlib.h>int main(void) {const int *a = malloc(sizeof(int));int *p = a;*p = 20;printf("%d\n", *a);return 0; }
运行结果:编译警告,执行正常,输出20
objdump未找到a,说明a不在rodata段,不在bss段。gdb看一眼。
发现,a和p指向同一块地址,这款地址在堆中。
转载于:https://www.cnblogs.com/vrg0/p/7049474.html
const的小把戏。相关推荐
- 文件描述符在内核态下的一些小把戏
http://bbs.chinaunix.net/thread-1928306-1-1.html 前面的话: linux环境:虚拟机VMware Server上安装的ubuntu10.4,通过putt ...
- SQL点滴12—SQL Server备份还原数据库中的小把戏
原文:SQL点滴12-SQL Server备份还原数据库中的小把戏 备份数据库时出现一个不太了解的错误 ,错误信息"is formatted to support 1 media fami ...
- 《思维转变》week-1 1-7 学习的时候应该听音乐吗1-8 如何学习复杂的知识---咖啡店的小把戏
week-1 1-7 学习的时候应该听音乐吗?Should You Listen to Music When You're Studying? 你想研究告诉你什么?你想说在你学习的时候听音乐是否合适? ...
- Linux shell中的那些小把戏
我日常使用Linux shell(Bash),但是我经常忘记一些有用的命令或者shell技巧.是的,我能记住一些命令,但是肯定不会只在特定的任务上使用一次,所以我就开 始在我的Dropbox账号里用文 ...
- 吉普赛人的祖传小把戏--读心术
被震住了 今天下午回来后玩了一个小游戏,吉普赛人祖传的神奇读心术,相信园子里很多同学都玩过了,刚开始玩真被震住了,想什么来什么,太牛了.甚至心里有点害怕了,不过仔细想了一下,原来如此.呵呵. 地址:h ...
- 微信系列研究之-----资源文件保护的小把戏
前言 微信对APK进行多维度的保护,包括我们以前提到的客户端到服务器验证签名,插件验证,文件变动检测,代码混淆,把核心功能放在SO中等. 其中比较有特色的是对资源文件的保护,防止被恶意分析和山寨. 目 ...
- Greenplum小把戏 - 你所不知道的时间戳长度玩法
为什么80%的码农都做不了架构师?>>> 在PG系列衍生版本里,时间戳timestamp通常能够提供最详细的时间表达方式,从年月日到毫秒. 但是在业务开发过程中,我们往往不需要 ...
- 10 行代码玩转弹性调度的小把戏
作者 | dog250 责编 | 唐小引 头图 | CSDN 下载自东方 IC 出品 | CSDN Linux 的进程调度器是通用的调度器,无论是 O(n)O(n),O(1)O(1),还是 CFS,均 ...
- Greenplm小把戏 - 增加分区脚本
为什么80%的码农都做不了架构师?>>> #!/usr/bin/env python import os,sys from datetime import * arg = sy ...
- greenplum查询表结构java_Greenplum小把戏 - 几个常用数据库对象大小查询SQL
1.查询表大小: postgres=# \d List of relations Schema | Name | Type | Owner | Storage --------+----------- ...
最新文章
- 网站SEO优化如何保证收录量?
- TP的URL设计和SEO支持
- python编译器如何设置中文_如何使setup.py test使用特定的fortran编译器?
- php如何在类的外部修改成员属性,php中如何在外部修改类的私有或受保护属性值...
- Java算法之寻找旋转数组中的最小值
- 双语阅读:坚持你的方向
- 高德定位html,Ionic3 高德Web定位
- win7删除桌面快捷方式图片的小箭头
- 串口线接法是什么 详细步骤介绍
- A股数据日级前复权数据补全
- 为什么.TM明明不便宜,却还是备受业界大佬们青睐?
- 中国首部房地产行业电子签名应用白皮书发布,法大大编写
- 【无线科普】802.11n 中HT20 HT40的区别和信道划分及plus,minus含义
- 网络安全实验室|网络信息安全攻防学习平台(脚本关)
- 强人工智能基本问题:自上而下还是自下而上?
- JS - 前端生成 UUID 四种方法
- 数据库服务器的性能指标,数据库服务器性能指标
- 员工管理:人才九宫格,提低扩中保高
- Typescript(一)
- 20210310 钣金件螺栓螺帽缺失检测汇总 dropout
热门文章
- 静态路由 动态路由 php,静态路由汇总(路由聚合)
- 驾考笔记:科目二考试满分攻略——超详细的点位细节梳理,各种意外情况处理方案整理
- oracle hot patch david,Hot Patch工具Rollout
- 【书影观后感 十二】沧浪之水清兮,可以濯我缨 沧浪之水浊兮,可以濯我足
- 考研英语朱伟推荐的句子,写作文可以用(三)
- python画图旋转图形_python简单实现旋转图片的方法
- html设置可编辑状态,HTML5 - 使某个页面元素或整个页面可编辑
- 问题 M: 【枚举】桐桐数
- 营业执照注册号是不是统一社会信用代码?
- 小程序错误:Setting data field collected to undefined is invalid.