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语言再说,想要成为高手还能查的很远呢,我要继续努力啦。

  • 相关阅读:
    POJ3159 Candies —— 差分约束 spfa
    POJ1511 Invitation Cards —— 最短路spfa
    POJ1860 Currency Exchange —— spfa求正环
    POJ3259 Wormholes —— spfa求负环
    POJ3660 Cow Contest —— Floyd 传递闭包
    POJ3268 Silver Cow Party —— 最短路
    POJ1797 Heavy Transportation —— 最短路变形
    POJ2253 Frogger —— 最短路变形
    POJ1759 Garland —— 二分
    POJ3685 Matrix —— 二分
  • 原文地址:https://www.cnblogs.com/1024E/p/13209648.html
Copyright © 2011-2022 走看看