没有合适的资源?快使用搜索试试~ 我知道了~
c语言的几个重要知识点.docx
0 下载量 91 浏览量
2023-07-12
02:03:01
上传
评论
收藏 864KB DOCX 举报
温馨提示
试读
37页
c语言的几个重要知识点.docx
资源推荐
资源详情
资源评论
点请留意,系统并不让我们全部都可以用。其中后面2GB 的内容是留给系统用的,用户是
不行以访问的,而且在前面的 2GB 也有局部区段不能访问,比方 0x00000000 就不能访
问。具体是哪些区段,不必关心。
c 语言的几个重要学问点
名目:
1. 内存构造
2 . 指针
3.
字符串处理
4.
裢表
5.
复习大纲中的一些学问点理解
1、 内存构造
这是核心中的核心,请认真看完,充分理解,否则请不要看下一节内容。
每个程序一启动都有一个大小为 4GB 的内存,这个内存叫虚拟内存,是概念上的,真正能
用到的,只是很小一局部,一般也就是在几百K 到几百M。我们 PC 中内存,我们称之为物
理内存,也就是 256M,512M 等,虚拟内存和物理内存的如何转换是由操作系统完成的, 我
们不需要管它。我们只需要管好我们自己程序的那4GB 内存就可以了。
要治理 4GB 的虚拟内存,就必需给每个字节安排一个号码,以便程序与访问到其中任何一
个字节。这个号码是从 0 开头挨次递增的,针对于这个号码我们就称之为地址,从0x000
00000-0xFFFFFFFF,这样,我们理论上就可以访问其中内存中任何一个字节了。但有一
留意:类似于 0x12345678 或 12345678H 是 10 进制数 305419896 的 16 进制表示法,
他们是一回事,显示 16 进制是为了便利显示及计算机计算。
程序都是用来做一些具体的事情,不管做什么事,构造都是很相像。程序启动,就有4GB 的
虚拟内存,通过 CPU 的计算,转变内存的内容,最终再复制内存的内容输出,输出的目的
地可以是:屏幕、文件、磁盘等外存、端口、网络等。如何输出呢,最终全部都是调用系统的
API,由操作系统完成。(这段话,请认真体会,并牢牢记住)
所以我们的核心问题就是:如何把握内存,让内存里的值,变成我们想要的结果。
留意:这里的把握,指读取或写入某段内存的内容。
在虚拟内存中,我们一般将其分为 4 个区域:
栈(stack)
堆(heap)
静态区域(static)
数据区域(data)
留意:不同的资料可能到具体的分法,有所不同,但大体上就是这样,我也是这样理解的。
如以以下图:
有兴趣的话,可以参考《Windows 核心编程》第三版,里面有具体的论述。
栈
任何除静态外的变量,数组等。都是被安排到栈中的。这些变量类似于:
int x;
char c;
char s[10];
整个程序中,栈的区域是一个连续的区域,其大小在VC6.0 中,是 1M。这个栈的特点有
点类似于我们以前学过的数据构造课程中的堆栈,都是后进先出。如何理解呢?看下面的程序
:
#include <stdio.h>
void ExecuteOtherCode
{
/*
...
*/
}
void TestStack1
{
int a = 1;
int b = 2;
ExecuteOtherCode;
}
void TestStack2
{
int c = 3;
int d = 4;
ExecuteOtherCode;
}
void main
{
TestStack1;
TestStack2;
}
栈的处理在 VC6 中是从高地址到低地址。执行该程序,运行函数到 TestStack1,其中定
义一个变量a,此时a 就是在栈中安排一段大小为sizeof(int)的内存空间。比方 a 的地址
&a 的值就为 0x0012ff28,由于 a 是 int 型的数据,其占用内存的大小为 4B(其具体介绍
参见稍后的留意)。所以 b 地址为 0x0012ff24,这两个内存的安排过程我们称之为“入栈”。
见以以下图:
TestStack1 完毕后,系统则先收回b 的空间,再收加a 空间,这个过程我们叫“出栈”。即
0x0012ff28 到 0x0012ff28-2*4 这段空间的内容不再有用了,即使其值还没有变化。接
着再运行到 TestStack2 函数,也定义了两个 int 变量 c,d,同样进展入栈操作,这样 c,d
很“可能”就占用了原来 a,b 的空间,见以以下图:
留意:计算占用内存空间的大小,可以用 sizeof(x)表示,其中 x 可以是变量,指针,数组,
以及各种类型名等,其返回值为整形数值。每一种类型占用多大空间,这个要特别留意,在 我
们寻常的 32 位一般 PC 机中,常见的有:
char
1B
short
2B
int
4B
long
4B
float
4B
double
8B
这里用到“可能”两个字,是由于实际栈中存放着不仅仅是这些变量,包括函数的指针等也是存
放在栈中,这样就会造成两个类似函数中的变量所占据的内存空间不一样。
任何类型的指针均为 4B,它正好能指向全部 4G 的虚拟内存,2 的 32 次方为 4G。
剩余36页未读,继续阅读
资源评论
Mmnnnbb123
- 粉丝: 677
- 资源: 8万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 农村信用社联合社计算机信息系统投产与变更管理办.docx
- 农村信用社联合社计算机信息系统数据管理办法.docx
- 利用SPSS作临床效度分析线上计算网站介绍-医学研究部统计谘.(医学PPT课件).ppt
- 利用Zabbix监控mysqldump定时备份数据库状态.docx
- 利用计算机解决问题的基本过程.doc
- 化工铁路通信工程总结.doc
- 北京大学网络教育软件工程作业.docx
- 医药公司(连锁店)计算机操作规程未新系统的自行按照旧制修改-新系统过制的编号加修模版.doc
- 医药公司(连锁店)计算机系统操作规程模版.doc
- 医药连锁门店计算机系统的操作和管理程序未新系统的自行按照旧制修改-新系统过制的编号加修模版.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功