免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: gigabyte
打印 上一主题 下一主题

给内存地址"0x123456789"赋值为0,请写出代码 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
31 [报告]
发表于 2010-03-08 12:06 |只看该作者
怕怕地问一声,为啥不是 char * 呢?

难道这个平台的内存单元地址不是按字节编号的?

论坛徽章:
0
32 [报告]
发表于 2010-03-08 12:38 |只看该作者
volatile char * p = (volatile char *) 0x123456789;
        *p = 0;


是不是怕被编译器优化掉,初始化直接format了那块内存?

论坛徽章:
0
33 [报告]
发表于 2010-03-08 12:54 |只看该作者
0x123456789这个地址已经超过32bit了啊,64位的机器所以要用long?

论坛徽章:
0
34 [报告]
发表于 2010-03-08 15:50 |只看该作者
回复 33# bukkake


    定义的是指针,又怎么会有不够长的问题呢。我倒觉的char* 是最好的。volatile倒是很重要的

论坛徽章:
0
35 [报告]
发表于 2010-03-08 17:35 |只看该作者
回复  gigabyte


    你也是湖南衡阳的?
独臂剑客 发表于 2010-03-07 22:54


我是衡阳滴。。。。。。

论坛徽章:
0
36 [报告]
发表于 2010-03-08 17:39 |只看该作者
这个内存地址是指物理地址吗?

论坛徽章:
0
37 [报告]
发表于 2010-03-08 20:54 |只看该作者
题目:给内存地址"0x123456789"赋值为0,请写出代码

我的做法是
int *p;
p = 0x123456789;
*p =  ...
gigabyte 发表于 2010-03-07 21:45


访问绝对地址(就是以数字给定的具体地址)是有很多限制的。
1)链接器是不是允许这样做?譬如单片机一般是可以的,其它或多或少有些问题。
2)与系统是否有冲突?一般是低地址。
3)0x123456789,已经超过32位了,你是什么机器?什么系统?

论坛徽章:
0
38 [报告]
发表于 2010-03-08 21:02 |只看该作者

论坛徽章:
0
39 [报告]
发表于 2010-03-09 16:13 |只看该作者
1)链接器是不是允许这样做?譬如单片机一般是可以的,其它或多或少有些问题。
beepbug 发表于 2010-03-08 20:54


请教一下,在code中用绝对地址对一个指针赋值并随之访问这个地址,跟链接器有什么关系呢?
谢谢!

论坛徽章:
0
40 [报告]
发表于 2010-03-09 16:47 |只看该作者
mov
mov
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP