zoukankan      html  css  js  c++  java
  • 内存寻址、对齐,变量左值和右值

    内存编址寻址及内存对齐

    1.内存的编址方法

        (1)内存就是存放各种数据的地方,操作系统管理内存是按照字节的方式来管理的,也就是说,操作系统能够识别的最小的内存单位是字节。
        (2)内存是一个物理元器件,也就是说每一个地址都是实际存在的,而且每一个内存单元都是有一个地址的,而且是唯一的地址。内存对应的地址永远不会变。
        (3)这时候牵扯到“内存的两面性”,对于一个内存有两种理解,1:内存的实际物理地址,2:内存的物理地址的编号。
        (4)左值和右值的概念就很好的体现了内存的两面性,先有个印象,后面还会深入研究的。变量做左值表示该变量的地址,变量做右值表示该变量的地址中的内容。如:a=b。则是把变量b中的内容存入变量a的地址中。2020-06-29 19:26:56
        (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语言再说,想要成为高手还能查的很远呢,我要继续努力啦。

  • 相关阅读:
    面向对象之继承
    面向对象之封装
    面向对象编程
    Centos7.7镜像源配置
    Centos7环境配置
    多表查询v1
    多表查询
    库相关操作
    数据库初识
    数据相关操作
  • 原文地址:https://www.cnblogs.com/1024E/p/13209648.html
Copyright © 2011-2022 走看看