内存空间的地址和最大内存地址空间的区别

C语言中变量与其内存地址对应的入门知识简单讲解
投稿:goldensun
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了C语言中变量与其内存地址对应的入门知识简单讲解,同时这也是掌握指针部分知识的基础,需要的朋友可以参考下
先来理解理解内存空间吧。请看下图:
如上图所示,内存只不过是一个存放数据的空间,就好像我的看电影时的电影院中的座位一样。电影院中的每个座位都要编号,而我们的内存要存放各种各样的数据,当然我们要知道我们的这些数据存放在什么位置吧。所以内存也要象座位一样进行编号了,这就是我们所说的内存编址。座位可以是遵循“一个座位对应一个号码”的原则,从“第1号”开始编号。而内存则是按一个字节接着一个字节的次序进行编址,如上图所示。每个字节都有个编号,我们称之为内存地址。好了,我说了这么多,现在你能理解内存空间这个概念吗?
我们继续看看以下的C/C++语言变量声明:
每次我们要使用某变量时都要事先这样声明它,它其实是内存中申请了一个名为i的整型变量宽度的空间(DOS下的16位编程中其宽度为2个字节),和一个名为a的字符型变量宽度的空间(占1个字节)。
我们又如何来理解变量是如何存在的呢。当我们如下声明变量时:
内存中的映象可能如下图:
图中可看出,i在内存起始地址为6上申请了两个字节的空间(我这里假设了int的宽度为16位,不同系统中int的宽度可能是不一样的),并命名为i。a在内存地址为8上申请了一字节的空间,并命名为a。这样我们就有两个不同类型的变量了。
赋值给变量
再看下面赋值:
你当然知道个两个语句是将30存入i变量的内存空间中,将“t”字符存入a变量的内存空间中。我们可以利用这样的形象来理解:
变量在哪里?
即我想知道变量的地址。
好了,接下来我们来看看&i是什么意思?
是取i变量所在的地址编号嘛。我们可以这样读它:返回i变量的地址编号。你记住了吗?
我要在屏幕上显示变量的地址值的话,可以写如下代码:
printf("%x", &i);
以上图的内存映象为例,屏幕上显示的不是i值30,而是显示i的内存地址编号6了。当然,在你的实际操作中,i变量的地址值不会是这个数了。
这就是我所认为的作为初学者应该能够想象到的变量存储的实质了。请这样理解吧。
最后总结代码如下:
#include "stdio.h"
int i = 5;
printf("%d\n", i); /*①*/
printf("%d\n", &i); /*②*/
return(0);
现在你可知道①、②两个printf分别在屏幕上输出的是i的什么东西啊?
程序运行结果:
Process returned 0 (0x0)
execution time : 0.079 s
Press any key to continue.
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
1. 基本概念和术语 逻辑地址、物理地址、逻辑地址空间、内存空间、重
下载积分:300
内容提示:1. 基本概念和术语 逻辑地址、物理地址、逻辑地址空间、内存空间、重
文档格式:PDF|
浏览次数:516|
上传日期: 09:40:50|
文档星级:
该用户还上传了这些文档
1. 基本概念和术语 逻辑地址、物理地址、逻辑地址空间
官方公共微信物理地址(RAM):cpu发出的地址
物理内存(DRAM):只占物理地址一部分,由/proc/iomem可见,“System RAM” 就是物理内存(DRAM)的空间:&/proc/iomem00fff : reserved
9fbff : System RAM
9ffff : reserved
000abffff : PCI Bus 0000:00
000cbff : Video ROM
000efffff : reserved
& 000ffffff : System ROM
fffff : System RAM
& 34484 : Kernel code
& c0cc8f : Kernel data
& 01daa3 : Kernel bss
ffffff : RAM buffer
io内存: 对外部设备寄存器(有的外部设备还有其内存)的编址方式,将物理地址(RAM)的一部分划出来用作IO地址空间。由上图可见,除了DRAM,其他空间有的被外设的寄存器占用。
虚拟地址:现代操作系统普遍采用虚拟内存管理(Virtual Memory Management)机制,这需要MMU(Memory Management Unit)的支持。MMU通常是CPU的一部分,如果处理器没有MMU,或者有MMU但没有启用,CPU执行单元发出的内存地址将直接传到芯片引脚上,被内存芯片(物理内存)接收,这称为物理地址(Physical Address),如果处理器启用了MMU,CPU执行单元发出的内存地址将被MMU截获,从CPU到MMU的地址称为虚拟地址(Virtual Address),而MMU将这个地址翻译成另一个地址发到CPU芯片的外部地址引脚上,也就是将虚拟地址映射成物理地址。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:207018次
积分:3745
积分:3745
排名:第6982名
原创:178篇
评论:18条
(5)(6)(5)(3)(1)(1)(11)(1)(2)(2)(7)(1)(8)(10)(4)(13)(2)(2)(1)(3)(1)(2)(1)(6)(5)(4)(2)(7)(7)(2)(5)(1)(8)(6)(27)(13)君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
浅谈C语言数据与内存分配空间和地址的联系
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口}

我要回帖

更多关于 内存地址空间 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信