C语言入门篇--理解地址及内存

1.内存

  • 内存是电脑中一个重要的存储器,计算机中所有的程序都在内存中运行的,内存的性能对计算机的影响非常大。
  • 内存是计算机与CPU进行沟通的桥梁,计算机会把程序由硬盘加载到内存中后再去使用。
  • 为了有效的使用内存,把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。

为了能够有效的访问即快速找到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。

一般运行一个程序主要涉及计算机的三个设备:内存、CPU、硬盘。

1.1内存和CPU的关系

CPU是负责数据的运算和处理,内存是用来交换数据,如果没有内存则CPU就无法接收到数据。

1.2内存和硬盘的关系

eg:C语言中定义变量,都是在程序运行起来后在内存中开辟空间。

2.地址

2.1概念

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

(2)为了能够有效的访问即快速找到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。

2.2地址编号

在32位平台下,内存单元的地址是由32位的二进制数(即8位十六进制数)依次编号。

所以内存单元共有2^23个,而每一个内存单元保存1个字节的内容。(具体见上图)

ps:

计算机访问内存的基本单位是字节。

一般计算机有32位和64位机器。

以32位机器为例,则能安装的最大内存为(2^32)*(1字节)=4GB

ps:4GB计算来源: (2^32)*(1字节)=(2*10)*(2*10)*(2*10)*(2*2)*(1字节)=4GB

常见的存储单位:

bit(位)、B(字节)、KB(千字节)、MB(兆字节)、GB(千兆字节)。

B 是 Byte 的缩写。

换算关系:

1B=8bit

1KB=1024B

1MB=1024KB

1GB=1024MB

2^10=1024

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

为了能够有效的访问即快速找到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。

32位计算机是指能同时处理32位二进制数,内存单元的地址是由32位的二进制(即8位十六进制)数依次编号,所以内存单元共有2^23个,而每一个内存单元是1个字节。

所以有:
(2^32)*(1字节)=(2*10)*(2*10)*(2*10)*(2*2)*(1字节)=1024*1024*1024*4*(1字节)=4GB

2.3关于编址

(1)计算机为什么对每个字节进行编址?

提高查找效率。计算机内存中编址从最低的地址,依次向上进行编址,有了地址就可以对计算机中每个字节进行快速寻址,方便计算机进行快速查找。

(2)所有的编制都是连续编址的。

(3)编址是由硬件电路自动完成的。

2.4使用

(1)C语言中定义变量都是在内存中定义的,定义变量的本质是开辟空间。

(2)每个变量都有地址,取一个变量的地址称作取地址。

(3)指针就是地址。

eg:

char a='A';
int b=10;

以上就是C语言入门篇--理解地址及内存的详细内容,更多关于C语言的资文章料请关注我们其它相关文章!

(0)

相关推荐

  • C语言中字符串的内存地址操作的相关函数简介

    C语言bcopy()函数:复制内存(字符串) 头文件: #include <string.h> bcopy() 函数用来复制内存(字符串),其原型为: void bcopy(const void *src, void *dest, int n); [参数]src 为源内存块(字符串)指针,dest 为目标内存块(字符串)指针,n 为要复制的内存(字符串)的前 n 个字节长度. bcopy()与memcpy()一样都是用来拷贝src 所指的内存内容前n 个字节到dest 所指的地址,不过参数sr

  • C语言中变量与其内存地址对应的入门知识简单讲解

    先来理解理解内存空间吧.请看下图: 如上图所示,内存只不过是一个存放数据的空间,就好像我的看电影时的电影院中的座位一样.电影院中的每个座位都要编号,而我们的内存要存放各种各样的数据,当然我们要知道我们的这些数据存放在什么位置吧.所以内存也要象座位一样进行编号了,这就是我们所说的内存编址.座位可以是遵循"一个座位对应一个号码"的原则,从"第1号"开始编号.而内存则是按一个字节接着一个字节的次序进行编址,如上图所示.每个字节都有个编号,我们称之为内存地址.好了,我说了这

  • 浅析c语言中的内存

    1.栈(stack):存局部变量.函数,调用函数时会开辟栈区,函数结束时就自动回收,遵循后进先出的原则,从高地址向低地址增长. 2.堆(heap):malloc.realloc.calloc等开辟的内存就在堆,从低地址向高地址增长,由程序员分配和释放,系统不自动回收,所以一定要记得申请了就要释放,以免溢出. 3.数据段(初始化数据段)(data):存放初始化的全局变量.static修饰的已初始化的变量. 4.未初始化数据段(bss段):存放未初始化的全局变量和static修饰的未初始化的变量.

  • C语言入门篇--理解地址及内存

    1.内存 内存是电脑中一个重要的存储器,计算机中所有的程序都在内存中运行的,内存的性能对计算机的影响非常大. 内存是计算机与CPU进行沟通的桥梁,计算机会把程序由硬盘加载到内存中后再去使用. 为了有效的使用内存,把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节. 为了能够有效的访问即快速找到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址. 一般运行一个程序主要涉及计算机的三个设备:内存.CPU.硬盘. 1.1内存和CPU的关系 CPU是负责数据的运算和处理,内

  • C语言入门篇--初识结构体

    目录 1.为什么要有结构体 2.结构体的定义 2.1结构体类型的定义 2.2定义结构体普通变量及访问 2.3定义结构体指针变量及访问 1.为什么要有结构体 (1)之前int.char等类型描述的结构体非常单一,只可描述一种类型. (2)数组也是描述同一类型的集合,只可描述一种类型. (3)而结构体使得C语言可以描述复杂类型,比如学生类型( 包含学生的名字.年龄.性别.电话号等信息). 结构体和数组的区别: 结构体:用来描述相同/不同数据元素类型的集合. 数组:用来描述具有相同数据元素类型的集合.

  • C语言入门篇--充分理解操作符

    目录 1.算术操作符 1.1除法运算 1.2取模运算 2.移位操作符 相关知识 1.移位运算是站在二进制角度移位的 2.左移右移,原始变量值不发生变化除非给原始变量赋值 3.整数移位运算不能整除时,只保留整数部分 4.C语言中的移位运算符 5.移位分为算术移左移.算术移右移和逻辑左移.逻辑右移 3.位操作符 3.1按位与& 3.2按位或 | 3.3异或 ^ 4.赋值操作符 5.单目操作符 5.1 逻辑反操作 ! 5.2 负值 - 正值 + 5.3 取地址 & 5.4 取反 ~ 5.5 前置

  • C语言入门篇--初识指针和指针变量

    1.指针 指针就是地址(即一个数据). 2.指针变量 2.1概念 (1)指针变量是变量,是变量在内存中就会开辟空间,会有自己对应的的地址,有自己的变量大小. (2)指针变量里放的内容是地址(即指针). 2.2指针变量大小 32位平台下,4字节. 48位平台下,8字节. 2.3指针变量理解 理解前一定先看看,地址相关知识. #include <stdio.h> int main() { int a = 10; int *p = &a;//p为指针变量 printf("a的地址=

  • C语言入门篇--变量的左值和右值

    目录 1.普通变量 2.指针变量 2.1初步理解 2.2深入理解 在看此块内容前可以先看看内存及地址相关内容,更容易理解. 1.普通变量 一个变量是有三个属性: 1.变量的空间. 2.变量的内容. 3.变量的地址. 空间即若干字节,内容即空间里放了什么,地址即变量对应的空间地址. #include <stdio.h> int main() { int a = 10;//定义变量a,开辟4个字节的空间. a = 20;//见下述文字解释 int b = a;//见下述文字解释 return 0;

  • C语言入门篇--变量[定义,初始化赋值,外部声明]

    1.变量 变量即变化的量. C语言中用 常量 来表示不变的值,用 变量 表示变化的值. eg:输出26个字母 #include <stdio.h> int main() { char c = 'A';//定义一个为char类型的变量c,并对其进行初始化 for (; c <='Z'; c++) { printf("%c", c); } printf("\n"); return 0; } 2.变量的定义 int temp; int age = 21;

  • C语言入门篇--关键字static详解

    目录 1.修饰局部变量 1.1作用 1.2举例 (1)不加static (2)加static (3)静态局部变量的初始化只会进行一次 2.修饰全局变量 2.1作用 2.2举例 (1)不加static (2)加static 3.修饰函数 3.1作用 3.2举例 (1)不加static (2)加static 1.修饰局部变量 1.1作用 ststic修饰局部变量,会改变局部变量的生命周期,不改变作用域: 生命周期:和全局变量一样具有全局性,但在内存中的位置没有改变,还在在静态存储区中. 作用域:作用

  • C语言入门篇--函数及数组用法

    目录 函数 1.函数的作用 2.函数的构成 (1)返回值 (2)函数名 (3)形参列表 (4)函数体 数组 1.定义数组 1.1不进行初始化 1.2进行初始化 1.3不给定数组元素个数 2.数组的经典用法 2.1求数组大小.元素大小.元素个数 2.2遍历 面向过程编程:C语言是面向过程的语言:在C语言中,把大部分的功能以一个个函数呈现,就称之为面向过程编程: 函数 是面向过程编程最关键的语法结构. 1.函数的作用 1.从工程上讲,函数可以让我们的代码更具有结构性,让代码更好看. 2.函数可以提升

  • C语言入门篇--注释,关键字typedef及转义字符详解

    目录 注释 1.注释意义 2.两种注释风格 2.1 C语言注释风格 2.2 C++注释风格 关键字typedef 1.注意 2.用法 语法结构 转义字符 1.转义字符及其含义 2.字面 转 特殊 3.特殊 转 字面 注释 1.注释意义 (1)代码中有不需要的代码可以直接删除,也可以注释掉. (2)有些代码比较难懂可以注释一下. 2.两种注释风格 2.1 C语言注释风格 /*xxxxxx*/ 一次可以注释一行或多行,但不能嵌套注释. eg: #include <stdio.h> int main

  • C语言入门篇--局部全局变量的作用域及生命周期

    目录 1.变量的分类 1.1 局部变量 1.2 全局变量 1.3 知识点 1.3.1 就近原则 1.3.2 访问规则 1.3.3 有效范围 2.变量的使用 3.变量的作用域和生命周期 3.1 作用域 3.1.1 局部变量的作用域 3.1.2 全局变量的作用域 3.2 生命周期 3.2.1 局部变量的生命周期 3.2.2 全局变量的生命周期 1.变量的分类 1.1 局部变量 也称临时变量,在函数.代码块内定义,一般只可在代码块内部使用的变量. 1.2 全局变量 具有全局性,放在函数外,在同一___

随机推荐