关于内存

About the Memory

前些天,一个以前的同事面试受挫,其中一条就挫死在内存上。 别的我不想多说,基础真的很重要,大家再来回顾一下C编译运行的内存机制。

在c中分为这几个存储区

  • - 由编译器自动分配释放
  • - 一般由程序员分配释放。若程序员没有释放,程序结束时由OS自己回收,当然也可能有回收不全的情况.
  • 全局区(或叫静态区) - 全局变量静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束才释放。
  • 常量区 - 另外还有一个专门放常量的地方。程序结束才释放。

举例说明:

a. 在函数体中定义的变量通常是在栈上,用malloc, calloc, realloc等分配内存的函数分配得到的就是在堆上。

b. 在所有函数体外定义的是全局量,加了static修饰符后不管在哪里都存放在全局区(静态区),在所有函数体外定义的static变量表示在该文件中有效,不能extern到别的文件用,在函数体内定义的static表示只在该函数体内有效。

c. 函数中的"adgfdf"这样的字符串存放在常量区


Objective-C建立在C的结构图+函数+函数指针+……基础上的运行机制,基本相同,有不同地方,我一时也总结不出来,比较忙,就此先打住了。
另外,以上内容基本靠回忆没有严谨的再去查阅相关资料,如有谬误欢迎斧正。