开发者学堂课程【C语言学习教程:动态内存分配】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/387/detail/4966
动态内存分配
内容
1.内存组织方式
2.内存分配方式及程序执行过程
一、内存组织方式
(1)内存分三个区
1.代码区:存放代码
2.数据段 :存放程序员的数据,偏向生命周期长的 ,比如 常量; 静态局部变量;全局变量
3.堆区 :区域大 ,但分配效率较低,存在内存断点
4.栈区:由操作系统管理,内存小,但效率高
二、内存分配方式(程序执行过程)
1.编辑-》编译-》、运行(编译是将程序翻译成机器编码的过程,以便让计算机执行。
2静态内存分配:
(1)编译器在处理程序源代码时(编译)进行内存分配
动态内存分配,因而效率比较高,但是它缺少灵活性,要求在程序执行之前就知道所需内存的类型和数量
(2)静态对象的分配与释放由编译器自动处理
(3)动态对象的分配与释放,必须由程序员显示地管理程序执行(运行)时按动态要求进行内存分配
(4)C语言中动态内存分配就是使用-一个标准的库函数malloc在堆区中申请内存
(5)malloc 会自动在堆里寻找合适申请大小的内存区并返回
3.动态内存分配
//
//
main. C
//
动态内存分配
//
// Created by dancer on 16/8/3.
// Copyright ◎2016年NSObject. All rights reserved.
//
#include <stdio.h>
// malloc函数在这个头文件内声明
#include <stdlib. h>
int main(int argc, const char * argv[]) {
//动态分配4个字节,会把分配的内存首地址返回
//
( int*)malloc(4) ;
//分配一个整型变量
int* pInt = ( int*)malloc(sizeof(int));
//分配一 个字符变量
char* pCh = (char*)malloc(sizeof(char));
. //分配- -个字符数组
char* pArray = (char*) malloc(sizeof(char)*10) ;
//分配一个 double 类型的变量
double* pDouble = ( double*) malloc(sizeof(double)) ;
//动态内存的使用
*pInt = 9;
printf("*pInt = %d\n" , *pInt) ;
*pCh='A';
printf("*pChar = %c\n" ,*pCh) ;
for (int i=0;i<10; i++) {
pArray[i] = 'a'+i;
}
for (int i=0; i<10; i++) {
printf("*(pArray+%d)=%c\n" , i,*( pArray+i)) ;
}
*pDouble = 9.8;
pr intf ("*pDouble = %. 2f\n", *pDouble) ;
//释放内存(释放内存的使用权限)
f ree ( pDouble) ;
free( pInt) ;
f ree( pCh) ;
I
free(pArray) ;
// insert code here. . .
printf("Hello,World!\n") ;
return 0;
}