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的小把戏。相关推荐

  1. 文件描述符在内核态下的一些小把戏

    http://bbs.chinaunix.net/thread-1928306-1-1.html 前面的话: linux环境:虚拟机VMware Server上安装的ubuntu10.4,通过putt ...

  2. SQL点滴12—SQL Server备份还原数据库中的小把戏

    原文:SQL点滴12-SQL Server备份还原数据库中的小把戏 备份数据库时出现一个不太了解的错误 ,错误信息"is formatted to support  1 media fami ...

  3. 《思维转变》week-1 1-7 学习的时候应该听音乐吗1-8 如何学习复杂的知识---咖啡店的小把戏

    week-1 1-7 学习的时候应该听音乐吗?Should You Listen to Music When You're Studying? 你想研究告诉你什么?你想说在你学习的时候听音乐是否合适? ...

  4. Linux shell中的那些小把戏

    我日常使用Linux shell(Bash),但是我经常忘记一些有用的命令或者shell技巧.是的,我能记住一些命令,但是肯定不会只在特定的任务上使用一次,所以我就开 始在我的Dropbox账号里用文 ...

  5. 吉普赛人的祖传小把戏--读心术

    被震住了 今天下午回来后玩了一个小游戏,吉普赛人祖传的神奇读心术,相信园子里很多同学都玩过了,刚开始玩真被震住了,想什么来什么,太牛了.甚至心里有点害怕了,不过仔细想了一下,原来如此.呵呵. 地址:h ...

  6. 微信系列研究之-----资源文件保护的小把戏

    前言 微信对APK进行多维度的保护,包括我们以前提到的客户端到服务器验证签名,插件验证,文件变动检测,代码混淆,把核心功能放在SO中等. 其中比较有特色的是对资源文件的保护,防止被恶意分析和山寨. 目 ...

  7. Greenplum小把戏 - 你所不知道的时间戳长度玩法

    为什么80%的码农都做不了架构师?>>>    在PG系列衍生版本里,时间戳timestamp通常能够提供最详细的时间表达方式,从年月日到毫秒. 但是在业务开发过程中,我们往往不需要 ...

  8. 10 行代码玩转弹性调度的小把戏

    作者 | dog250 责编 | 唐小引 头图 | CSDN 下载自东方 IC 出品 | CSDN Linux 的进程调度器是通用的调度器,无论是 O(n)O(n),O(1)O(1),还是 CFS,均 ...

  9. Greenplm小把戏 - 增加分区脚本

    为什么80%的码农都做不了架构师?>>>    #!/usr/bin/env python import os,sys from datetime import * arg = sy ...

  10. greenplum查询表结构java_Greenplum小把戏 - 几个常用数据库对象大小查询SQL

    1.查询表大小: postgres=# \d List of relations Schema | Name | Type | Owner | Storage --------+----------- ...

最新文章

  1. 网站SEO优化如何保证收录量?
  2. TP的URL设计和SEO支持
  3. python编译器如何设置中文_如何使setup.py test使用特定的fortran编译器?
  4. php如何在类的外部修改成员属性,php中如何在外部修改类的私有或受保护属性值...
  5. Java算法之寻找旋转数组中的最小值
  6. 双语阅读:坚持你的方向
  7. 高德定位html,Ionic3 高德Web定位
  8. win7删除桌面快捷方式图片的小箭头
  9. 串口线接法是什么 详细步骤介绍
  10. A股数据日级前复权数据补全
  11. 为什么.TM明明不便宜,却还是备受业界大佬们青睐?
  12. 中国首部房地产行业电子签名应用白皮书发布,法大大编写
  13. 【无线科普】802.11n 中HT20 HT40的区别和信道划分及plus,minus含义
  14. 网络安全实验室|网络信息安全攻防学习平台(脚本关)
  15. 强人工智能基本问题:自上而下还是自下而上?
  16. JS - 前端生成 UUID 四种方法
  17. 数据库服务器的性能指标,数据库服务器性能指标
  18. 员工管理:人才九宫格,提低扩中保高
  19. Typescript(一)
  20. 20210310 钣金件螺栓螺帽缺失检测汇总 dropout

热门文章

  1. 静态路由 动态路由 php,静态路由汇总(路由聚合)
  2. 驾考笔记:科目二考试满分攻略——超详细的点位细节梳理,各种意外情况处理方案整理
  3. oracle hot patch david,Hot Patch工具Rollout
  4. 【书影观后感 十二】沧浪之水清兮,可以濯我缨 沧浪之水浊兮,可以濯我足
  5. 考研英语朱伟推荐的句子,写作文可以用(三)
  6. python画图旋转图形_python简单实现旋转图片的方法
  7. html设置可编辑状态,HTML5 - 使某个页面元素或整个页面可编辑
  8. 问题 M: 【枚举】桐桐数
  9. 营业执照注册号是不是统一社会信用代码?
  10. 小程序错误:Setting data field collected to undefined is invalid.