草庐IT

【初识c语言】地址及其内存的简介

小李同学_LHY 2024-04-19 原文

晚钟悠然追为你

回声两度为你作答

暗夜逆流而上

树根在秘密发电

你的果园亮了

我径直走向你

带领所有他乡之路

当火焰试穿大雪

日落封存帝国

大地之书翻到此刻

————节选 北岛《路歌》

一. 内存的简介:

在计算机的组成结构中,有一个很重要的部分,就是储存器。储存器是用来存储程序和数据的部件,对于计算机来说,有了储存器,才有记忆功能,才能保证正常工作。存储器的种类很多,按其用途可分为主储存器辅助存储器,主存储器又称内存储器。内存又称主存,是cpu能直接寻址的存储空间,由半导体器件制成。内存的特点是存取内存速度快。内存是电脑中的主要部件,它是相对于外存而言的。我们平常使用的程序,如Windows操作系统,打字软件,游戏软件等,一般都是安装在硬盘等

在外存上的,但因此是不能使用其功能的,必须把它们调用内存中运行,才是真正使用其功能,我们平时输入一段文字,或玩一个游戏,其实都是在内存中进行的。就好比在一个书房里,存放书籍的书架和书柜相当于电脑的外存,而我们工作的办工桌就是内存,通常我们把要永久保存的,大量的数据存储在外存上,而把一些临时的或少量的数据和程序放在内存上。而内存的好坏会直接影响电脑的运行速度。

内存中常见的存储单位(从小到大):Bit(比特位),Byte(字节),KB(千字节),MB(兆字节),GB(千兆字节),TB(太字节)

以上的换算关系为:

1 Bit = 8 Byte;

1 KB = 1024 Byte;

1 MB = 1024 KB;

1 GB = 1024 MB;

1 TB = 1024 GB;

内存的换算率为1024,即是2^32。

为了有效的使用内存,把内存划分为一个个小的内存单元,每个内存单元的大小是一个字节。

你可以把这个内存想象成这个逼样

    内存 
  一个字节
  一个字节
  一个字节
  一个字节
      .
      .
      .
      .
      .
      .
      .
      .
  一个字节
  一个字节
  一个字节
  一个字节
  一个字节

顺嘴一提,在c语言中,不同数据类型所占内存空间大小不同,以64位机和64位编译器为例

    数据类型  占内存空间
    char   1个字节
    char *   8个字节
    int   4个字节
  short int    2个字节
unsigned int    4个字节
    float   4个字节
   double   8个字节
    long   8个字节
  long long   8个字节

二.地址的简介

1.地址是什么?

地址是内存中一个最小单元的编号。前面提到了内存是用来存储数据的空间,那它一定是有编号的,找到内存必须先访问地址,就比如学校里的每一个宿舍都有自己的宿舍号,没有宿舍号阿姨怎么找对宿舍进行查寝(这么好?)。

2.地址是如何产生?

在计算机上,有地址线,纯纯物理上的电线,是电线肯定要通电,因为电压的问题,地址线通电后就会产生电信号,电信号分为高电平信号,低电平信号,之后会转换成数字信号,一般高电平信号代表数值 1,低电平信号代表数值 0,以32位机器为例,32位机器上有三十二根地址线,咱假设把地址线想象成这样

 上图的地址线位有三十二根(对应的 0 / 1没有空间只能写少点),通电后每根地址线产生数字 1 或者 0,就产生了二进制 2^32的编号,这些编号,就作为了内存的地址来管理内存单元 ,2^32个编号就管理了2^32的字节,通过换算,管理的是 4GB 的内存空间,同理,如果是64位机器的话,那就管理的是 8GB的内存空间。

内存中是以什么进制显示地址的?

举个简单例子:

我们定义一个int 类型的变量,初始化 a = 15,在计算机中,数据是以二进制的形式存储的)

简单展示一下 a 在内存的存储

 然后我们看看从内存中看a的地址是什么:

因为 a 是int类型在内存占看4个字节的单元内存,自然就有4个地址,可是你在编译器上打印出来只会给你首地址(从下往上数的第一个),而且地址是以十六进制的形式在内存中表示的,因为,二进制的四位可以转换成十六进制的的一位,在内存的表达中更直观清晰些。

比如 a = 15以二进制的形式存入内存中

0000 0000 0000 0000 0000 0000 0000 0000 1110

而在内存以十六进制表示a的值

0x 00 00 0f

好了,咱今天就分享到这里,看官就顺便点个赞呗

有关【初识c语言】地址及其内存的简介的更多相关文章

  1. ruby-on-rails - Ruby net/ldap 模块中的内存泄漏 - 2

    作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代

  2. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  3. ruby-on-rails - Ruby 中的内存模型 - 2

    ruby如何管理内存。例如:如果我们在执行过程中采用C程序,则以下是内存模型。类似于这个ruby如何处理内存。C:__________________|||stack|||------------------||||------------------|||||Heap|||||__________________|||data|__________________|text|__________________Ruby:? 最佳答案 Ruby中没有“内存”这样的东西。Class#allocate分配一个对象并返回该对象。这就是程序

  4. ruby - 从 Ruby 中的主机名获取 IP 地址 - 2

    我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge

  5. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  6. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  7. 7个大一C语言必学的程序 / C语言经典代码大全 - 2

    嗨~大家好,这里是可莉!今天给大家带来的是7个C语言的经典基础代码~那一起往下看下去把【程序一】打印100到200之间的素数#includeintmain(){ inti; for(i=100;i 【程序二】输出乘法口诀表#includeintmain(){inti;for(i=1;i 【程序三】判断1000年---2000年之间的闰年#includeintmain(){intyear;for(year=1000;year 【程序四】给定两个整形变量的值,将两个值的内容进行交换。这里提供两种方法来进行交换,第一种为创建临时变量来进行交换,第二种是不创建临时变量而直接进行交换。1.创建临时变量来

  8. HBase Region 简介和建议数量&大小 - 2

    Region是HBase数据管理的基本单位,region有一点像关系型数据的分区。region中存储这用户的真实数据,而为了管理这些数据,HBase使用了RegionSever来管理region。Region的结构hbaseregion的大小设置默认情况下,每个Table起初只有一个Region,随着数据的不断写入,Region会自动进行拆分。刚拆分时,两个子Region都位于当前的RegionServer,但处于负载均衡的考虑,HMaster有可能会将某个Region转移给其他的RegionServer。RegionSplit时机:当1个region中的某个Store下所有StoreFile

  9. 键删除后 ruby​​ 哈希内存泄漏 - 2

    你好,我无法成功如何在散列中删除key后释放内存。当我从哈希中删除键时,内存不会释放,也不会在手动调用GC.start后释放。当从Hash中删除键并且这些对象在某处泄漏时,这是预期的行为还是GC不释放内存?如何在Ruby中删除Hash中的键并在内存中取消分配它?例子:irb(main):001:0>`ps-orss=-p#{Process.pid}`.to_i=>4748irb(main):002:0>a={}=>{}irb(main):003:0>1000000.times{|i|a[i]="test#{i}"}=>1000000irb(main):004:0>`ps-orss=-p

  10. ruby-on-rails - HTTParty 的内存问题和下载大文件 - 2

    这会导致Ruby出现内存问题吗?我知道如果大小超过10KB,Open-URI会写入TempFile。但是HTTParty会在写入TempFile之前尝试将整个PDF保存到内存吗?src=Tempfile.new("file.pdf")src.binmodesrc.writeHTTParty.get("large_file.pdf").parsed_response 最佳答案 您可以使用Net::HTTP。参见thedocumentation(特别是标题为“流媒体响应机构”的部分)。这是文档中的示例:uri=URI('http://e

随机推荐