1.3.内存编址和寻址以及内存对齐

1.3.内存编址和寻址以及内存对齐

写C语言程序一定要从内存出发,时刻要考虑到内存的物理限制,下面说说我对内存编址寻址和对齐的理解

1.内存的编址方法

    (1)内存就是存放各种数据的地方,操作系统管理内存是按照字节的方式来管理的,也就是说,操作系统能够识别的最小的内存单位是字节。
    (2)内存是一个物理元器件,也就是说每一个地址都是实际存在的,而且每一个内存单元都是有一个地址的,而且是唯一的地址。内存对应的地址永远不会变。
    (3)这时候牵扯到“内存的两面性”,对于一个内存有两种理解,1:内存的实际物理地址,2:内存的物理地址的编号。
    (4)左值和右值的概念就很好的体现了内存的两面性,先有个印象,后面还会深入研究的。
    (5)内存编址是以字节为单位的,一个内存单元地址的大小是一个字节。(关键,朱老师说了,这一句是最最重要的,哈哈)
    (6)int以及所有的变量类型定义的变量所占的内存和CPU有关,32位CPU里,int就占32位(四个字节)。
    (7)内存对齐,内存编址从0开始,0.1.2.3.这四个内存在逻辑上和硬件上都是连续的,在逻辑上这四个内存也是连续的,实际上在硬件上却不是连续的,比如去酒店里面,虽然1.2.3.4.这四个房间号是连续的,但是很有可能在2和3号房间之间隔着一个厕所。
    
    (8)举个例子:int test[10];定义了一个int类型的数组,第一个元素test[0]占4内存地址也就是4个字节(注意:在32位电脑上4个字节,在其他电脑上就不一样了),数组名test代表数组首元素的首地址,理解一下这句话,首元素就是数组里面的第一个元素,可能有很多个元素。首元素的首地址的意思是,第一个元素的第一个字节的地址,因为一个元素可能占好多字节。当定义一个指针指向该数组时,int * ptest=test; *ptest 可以访问到第一个元素的内容,指针ptest自增+1时,ptest并不是自增了一个字节,而是当前元素占得字节数,ptest+1其实是ptesrt+1*(sizeof(test[0]));


总结:

学习了半年的C语言了,觉得真是一门博大精深的语言,了解过一点java,感觉没有C语言直接,对于搞嵌入式的人来说,关键还是C语言,我决定先学两年大笑C语言再说,想要成为高手还能查的很远呢,我要继续努力啦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值