a=b=c=18,三个该地址不能通过变量进行分配被分配到相同的内存空间上

中国最大的IT实战在线培训平台

中國最大的IT实战在线教育培训平台

全局该地址不能通过变量进行分配全部存放在静态存储区,在程序开始执行时给全局该地址不能通过变量进行分配分配存储区程序行完毕就释放。在程序执行过程中它们占据固定的存储单元而不动态地进行分配和释放。

用户存储空间可鉯分为三个部分:

2)静态存储区;(是指在程序运行期间分配固定的存储空间的方式)

3)动态存储区;(是在程序运行期间根据需要进行动態的分配存储空间的方式。)

来自电脑网络类芝麻团 推荐于

全局该地址不能通过变量进行分配存放在全局静态存储区

用户存储空间可以汾为三个部分:

程序区主要用来存放用户编写的源代码。

全局该地址不能通过变量进行分配存放在静态存储区在程序开始执行时给全局該地址不能通过变量进行分配分配存储区,程序行完毕就释放在程序执行过程中它们占据固定的存储单元,而不动态地进行分配和释放

动态存储区存放以下数据:

2) 自动该地址不能通过变量进行分配(未加static声明的局部该地址不能通过变量进行分配);

3) 函数调用实的现场保護和返回地址;

来自电脑网络类芝麻团 推荐于

全局该地址不能通过变量进行分配是编程术语中的一种,源自于该地址不能通过变量进行分配之分

该地址不能通过变量进行分配分为局部与全局,局部该地址不能通过变量进行分配又可称之为内部该地址不能通过变量进行分配由某对象或某个函数所创建的该地址不能通过变量进行分配通常都是局部该地址不能通过变量进行分配,只能被内部引用而无法被其咜对象或函数引用。

全局该地址不能通过变量进行分配既可以是某对象函数创建也可以是在本程序任何地方创建。全局该地址不能通过變量进行分配是可以被本程序所有对象或函数引用一个局部该地址不能通过变量进行分配在被其它对象引用时,会是一个空值但全局該地址不能通过变量进行分配却不会出现这种情况。

全局该地址不能通过变量进行分配全部存放在静态存储区在程序开始执行时给全局該地址不能通过变量进行分配分配存储区,程序行完毕就释放在程序执行过程中它们占据固定的存储单元,而不动态地进行分配和释放;

全局该地址不能通过变量进行分配存放在静态存储区

在程序开始执行时给全局该地址不能通过变量进行分配分配存储区程序行完毕就釋放。在程序执行过程中它们占据固定的存储单元而不动态地进行分配和释放。

静态存储区 全局该地址不能通过变量进行分配、静态该哋址不能通过变量进行分配

堆区(Heap) 动态内存

栈区(Stack) 局部该地址不能通过变量进行分配、函数形参等

}

  在计算机系统特别是嵌入式系统中,内存资源是非常有限的尤其对于移动端开发者来说,硬件资源的限制使得其在程序设计中首要考虑的问题就是如何有效地管悝内存资源本文是作者在学习C语言内存管理的过程中做的一个总结,如有不妥之处望读者不吝指正。

  在C语言中关于内存管理的知识点比较多,如函数、该地址不能通过变量进行分配、作用域、指针等在探究C语言内存管理机制时,先简单复习下这几个基本概念:

仩运行就有垃圾回收机制)那堆内存如何使用?

  接下来看堆内存的分配和释放:

  malloc函数用来在堆中分配指定大小的内存单位为芓节(Byte),函数返回void *指针;free负责在堆中释放malloc分配的内存malloc与free一定成对使用。看下面的例子:

   程序可以正常运行这样就解决了刚才实驗三的栈溢出问题。堆的容量有多大?理论上讲它可以使用除了系统占用内存空间之外的所有空间。实际上比这要小些比如我们平时会咑开诸如QQ、浏览器之类的软件,但这在一般情况下足够用了实验二中说到,不能将一个栈该地址不能通过变量进行分配的地址通过函数嘚返回值返回如果我们需要返回一个函数内定义的该地址不能通过变量进行分配的地址该怎么办?可以这样做:

  这样写是没有问题嘚可以通过函数返回一个堆地址,但记得一定用通过free函数释放申请的堆内存空间"int *p = (int *)malloc(sizeof(int));"换成"static int a = 0"也是合法的。因为静态区的内存在程序运行的整個期间都有效但是后面的free函数就不能用了!

  用来在堆中申请内存空间的函数还有calloc和realloc,用法与malloc类似

 部分分析如下:

  main函数和UpdateCounter为代碼的一部分,故存放在代码区

  数组a默认为全局该地址不能通过变量进行分配故存放在静态区

  需要注意以下几点:

  • 栈是从高地址姠低地址方向增长;
  • 在C语言中,函数参数的入栈顺序是从右到左因此UpdateCounter函数的3个参数入栈顺序是a1、c、b
  • C语言中形参和实参之间是值传递,UpdateCounter函数里的参数a[1]、c、b与静态区的a[1]、c、b不是同一个

  "char *b = NULL"定义一个指针该地址不能通过变量进行分配bb的地址是0xFFF8,值为空-->运行到"b = (char*)malloc(1024*sizeof(char))"时才在堆中申請了一块内存(假设这块内存地址为0x77a0080)给了b此时b的地址并没有变化,但其值变为了0x77a0080这个值指向了一个堆空间的地址(栈该地址不能通過变量进行分配的值指向了堆空间),这个过程b的内存变化如下:

  学习内存管理就是为了知道日后怎么样在合适的时候管理我们的内存那么问题来了?什么时候用堆什么时候用栈呢一般遵循以下三个原则:

  • 如果明确知道数据占用多少内存,那么数据量较小时用栈較大时用堆;
  • 如果不知道数据量大小(可能需要占用较大内存),最好用堆(因为这样保险些);
  • 如果需要动态创建数组则用堆。
//...//这里對动态创建的数组做其他操作

  操作系统在管理内存时最小单位不是字节,而是内存页(32位操作系统的内存页一般是4K)比如,初次申请1K内存操作系统会分配1个内存页,也就是4K内存4K是一个折中的选择,因为:内存页越大内存浪费越多,但操作系统内存调度效率高不用频繁分配和释放内存;内存页越小,内存浪费越少但操作系统内存调度效率低,需要频繁分配和释放内存嵌入式系统的内存内存资源很稀缺,其内存页会更小因此在嵌入式开发当中需要特别注意。

}

我要回帖

更多关于 设ab和c都是int型变量 的文章

更多推荐

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

点击添加站长微信