18567|11

954

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

arm中的一个地址有几个字节呢 [复制链接]

32为的arm,比如stm32的一个地址有几个字节呢,一个或4个?
意思是说 比如0x80000000这个地址,在这个地址能够存几个字节的数据呢?
也或者说 一个32位的数 比如0xffffffff,存放在几个地址里面?如果我*(0x80000000)=0xffffffff;这个32位全部放在0x80000000这个地址吗,还是这个地址只放了8为,32为的数要占用4个地址。。
一直对这个有点迷惑

最新回复

呵呵,楼主挺可爱的,加油  详情 回复 发表于 2015-1-5 20:09
点赞 关注(2)

回复
举报

6040

帖子

203

TA的资源

版主

沙发
 
按你的思路,一个地址只能存放一个字节的,一个整数,需要四个地址空间。

点评

谢谢,我想也应该是这样,只是在网络上看到别人的说法,就有了一点不确定,刚刚在Windows上实验,的确如此  详情 回复 发表于 2015-1-4 22:55
 
 

回复

954

帖子

0

TA的资源

纯净的硅(初级)

板凳
 
lcofjp 发表于 2015-1-4 22:49
按你的思路,一个地址只能存放一个字节的,一个整数,需要四个地址空间。


谢谢,我想也应该是这样,只是在网络上看到别人的说法,就有了一点不确定,刚刚在Windows上实验,的确如此

点评

因为咱们所说的地址,是字节地址。在这个基础上,才会有这个结果。  详情 回复 发表于 2015-1-4 23:03
 
 
 

回复

6040

帖子

203

TA的资源

版主

4
 
247153481 发表于 2015-1-4 22:55
谢谢,我想也应该是这样,只是在网络上看到别人的说法,就有了一点不确定,刚刚在Windows上实验,的确如此


因为咱们所说的地址,是字节地址。在这个基础上,才会有这个结果。


点评

什么意思?  详情 回复 发表于 2015-1-5 08:01
 
 
 

回复

954

帖子

0

TA的资源

纯净的硅(初级)

5
 
lcofjp 发表于 2015-1-4 23:03
因为咱们所说的地址,是字节地址。在这个基础上,才会有这个结果。



什么意思?

点评

你现在对C语言中的类型了解还不深入。 地址,也就是传说中C中的指针,是分类型的。 这个地址中可以保存一个字节,2个字节,4个字节,8个甚至更多(可以采用结构体) 至于保存多少,要看地址的类型。如果是字  详情 回复 发表于 2015-1-5 08:56
 
 
 

回复

1万

帖子

16

TA的资源

版主

6
 
默认是32位地,但你可以强制类型为8位或16位地。

点评

这是不说对于32位几,数据时4字节对齐的呢?  详情 回复 发表于 2015-1-5 10:21
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

6040

帖子

203

TA的资源

版主

7
 


你现在对C语言中的类型了解还不深入。
地址,也就是传说中C中的指针,是分类型的。
这个地址中可以保存一个字节,2个字节,4个字节,8个甚至更多(可以采用结构体)
至于保存多少,要看地址的类型。如果是字节类型,那么只能保存1个字节,如果是int类型,则能向改地址写入4个字节
所以你的*(0x80000000)=0xFFFFFFFF;这样的语句都是你凭空想象出来的,C语言是不能理解的,因为他不知道地址的类型。
所以你想保存几个自己,完全是你自己控制的,你只需指定他的类型即可。例如你要在某地址保存两个字节,可以这样写*(uint16_t*)0x20000000=0x1234;



点评

额,明白了,我在使用int行指针的时候,明明好似*p++,而p的值却加了4.其实也可以说一个地址还是对应8个比特(在8bit为一字节的机器上),但是如果使用int型,编译器就会给你4个字节,自然指针加1也就是加4了。 谢  详情 回复 发表于 2015-1-5 10:20
 
 
 

回复

954

帖子

0

TA的资源

纯净的硅(初级)

8
 
lcofjp 发表于 2015-1-5 08:56
你现在对C语言中的类型了解还不深入。
地址,也就是传说中C中的指针,是分类型的。
这个地址中可以保存一个字节,2个字节,4个字节,8个甚至更多(可以采用结构体)
至于保存多少,要看地址的类型。如果是字节类型,那么只能保存1个字节,如果是int类型,则能向改地址写入4个字节
所以你的*(0x80000000)=0xFFFFFFFF;这样的语句都是你凭空想象出来的,C语言是不能理解的,因为他不知道地址的类型。
所以你想保存几个自己,完全是你自己控制的,你只需指定他的类型即可。例如你要在某地址保存两个字节,可以这样写*(uint16_t*)0x20000000=0x1234;
额,明白了,我在使用int行指针的时候,明明好似*p++,而p的值却加了4.其实也可以说一个地址还是对应8个比特(在8bit为一字节的机器上),但是如果使用int型,编译器就会给你4个字节,自然指针加1也就是加4了。
谢谢你那么详细的解答。




 
 
 

回复

954

帖子

0

TA的资源

纯净的硅(初级)

9
 
ddllxxrr 发表于 2015-1-5 08:29
默认是32位地,但你可以强制类型为8位或16位地。



这是不说对于32位几,数据时4字节对齐的呢?

点评

是地,但是我觉得地址是8位一走的,只不过多走几个罢了,比如,你强制32位就走4个,你强制16 位走两个,8位就走一个  详情 回复 发表于 2015-1-5 16:04
 
 
 

回复

1万

帖子

16

TA的资源

版主

10
 
247153481 发表于 2015-1-5 10:21
这是不说对于32位几,数据时4字节对齐的呢?



是地,但是我觉得地址是8位一走的,只不过多走几个罢了,比如,你强制32位就走4个,你强制16 位走两个,8位就走一个
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

1025

帖子

1

TA的资源

纯净的硅(高级)

11
 
呵呵,楼主挺可爱的,加油

点评

,我是怕没把问题描述清楚,写的啰嗦一点。。。加油  详情 回复 发表于 2015-1-5 20:54
 
 
 

回复

954

帖子

0

TA的资源

纯净的硅(初级)

12
 
lelee007 发表于 2015-1-5 20:09
呵呵,楼主挺可爱的,加油


,我是怕没把问题描述清楚,写的啰嗦一点。。。加油

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表