首页 存档 技术 查看内容

Android NDK 开发之旅 3 -- C 语言基础--内存分配

2018-3-30 13:00 |来自: 互联网 325 0

摘要: 作者 | 焕然一璐 地址 | http://www.jianshu.com/p/9ea2767454aa 1C 语言里面的内存划分 栈区(栈内存,存放局部变量,自动分配和释放,里面函数的参数,方法里面的临时变量) 堆区(动态内存分配,C 语言里面由程 ...


作者 | 焕然一璐

地址 | http://www.jianshu.com/p/9ea2767454aa


1

C 语言里面的内存划分


  1. 栈区(栈内存,存放局部变量,自动分配和释放,里面函数的参数,方法里面的临时变量)

  2. 堆区(动态内存分配,C 语言里面由程序员手动分配),最大值为操作系统的 80%

  3. 全局区(静态区)

  4. 常量区(字符串)

  5. 程序代码区


2

静态与动态内存分配

  1. 在程序运行过程中,动态指定需要使用的内存大小,手动释放,释放之后这些内存还可以被重新使用。

  2. 静态内存分配,分配内存大小的是固定,问题:1.很容易超出栈内存的最大值 2.为了防止内存不够用会开辟更多的内存,容易浪费内存。


3

栈溢出

void main(){
    //下面的代码会导致栈溢出
    //属于静态内存分配,分配到栈里面,Window里面每一个应用栈大概是2M,大小确定。与操作系统有关。
    int a [1024 * 1024 * 10 * 4];
}



4

动态内存分配与释放


//堆存分配,40M
//参数:字节 KB M 10M 40M
//开辟
int* p1 = (int*)malloc(1024*1024*10*sizeof(int));

//释放
free(p1);


5

通过动态内存分配来动态指定数组的大小

int len;
len = scanf("%d" ,
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部