c语言的几个重要知识点.docxVIP

  • 1
  • 0
  • 约1.76万字
  • 约 38页
  • 2025-10-23 发布于江苏
  • 举报

c语言的几种重要学问点

名目:

1.内存结构

2.指针

字符串解决

裢表

复习大纲中的某些学问点了解

1、内存结构

这是关键中的关键,请认真看完,充分了解,不然请不要看下一节内容。

每个程序一开启都有一个大小为4GB的内存,这个内存叫虚拟内存,是概念上的,真正能用到的,只是很小一局部,通常也就是在几百K到几百M。我们PC中内存,我们称之为物理内存,也就是256M,512M等,虚拟内存和物理内存的如何转换是由操作系统完成的,我们不需要管它。我们只需要管好我们自已程序的那4GB内存就可以了。

点请留心,系统并不让我们全部都可以用。其中背面2GB的内容是留給系统用的,用户是不行以访问的,而且在前面的2GB也有局部区段不能访问,比喻0就不能访问。具体是哪些区段,无须关心。要治理4GB

点请留心,系统并不让我们全部都可以用。其中背面2GB的内容是留給系统用的,用户是不行以访问的,而且在前面的2GB也有局部区段不能访问,比喻0就不能访问。具体是哪些区段,无须关心。

留心:类似于0或是10进制数的16进制表达法,他们是一回事,显示16进制是为了便利显示及计算机计算。

程序都是用来做某些具体的事情,不管做什么事,结构都是很相像。程序开启,就有4GB的虚拟内存,经过CPU的计算,转变内存的内容,最终再复制内存的内容输出,输出的目标地可以是:屏幕、文件、磁盘等外存、端口、网络等。如何输出呢,最终全部都是调用系统的API,由操作系统完成。(这段话,请认真体会,并牢紧记住)

所以我们的关键问题就是:如何把握内存,让内存里的值,变成我们想要的成果。留心:这里的把握,指读取或写入某段内存的内容。

在虚拟内存中,我们通常将其分为4个区域:栈(stack)

堆(heap)

静态区域(static)数据区域(data)

留心:不一样的资料可能到具体的分法,有所不一样,但大致上就是这么,我也是这么了解的。如以如下列图:

有爱好的话,可以参考《Windows关键编程》第三版,里面有具体的阐述。

任何除静态外的变量,数组等。都是被安排到栈中的。这些变量类似于:intx;

charc;chars[10];

整个程序中,栈的区域是一个连续的区域,其大小在VC6.0中,是1M。这个栈的特点有点类似于我们此前学过的数据结构課程中的堆栈,都是后进先出。如何了解呢?看下面的程序:

#includestdio.h

voidExecuteOtherCode

/*

...

*/

voidTestStack1

{

inta=1;intb=2;

ExecuteOtherCode;

}

voidTestStack2

{

intc=3;intd=4;

ExecuteOtherCode;

}

voidmain

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的空间,见以如下列图:

任何类型的指针均为

任何类型的指针均为4B,它恰好能指向全部4G的虚拟内存,2的32次方为4G。

这里用到

这里用到“可能”两个字,是因为实际栈中存储着不仅仅是这些变量,包含函数的指针等也是存储在栈中,这么就会导致两个类似函数中的变量所占据的内存空间不一样。

留心:计算占用内存空间的大小,可以用sizeof(x)表达,其中x可以是变量,指针,数组,以及各种类型名等,其返回值为整形数值。每一个类型占用多大空间,这个要特别留心,在我们寻常的32位通常PC机中,常见的有:

char

1B

short

2B

int

4B

long

4B

float

4B

double

8B

数组:

intarr[10];

表达10个

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档