当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 学习笔记 > 变量存储类型 动态内存分配详解

变量存储类型 动态内存分配详解 时间:2018-07-26      来源:未知

【一】、变量的存储类型

1. 变量的定义

变量是对内存空间的抽象

2. 变量的生命周期

变量在内存中的存储时间。既变量从申请内存到释放内存的一段时间。

3. 变量的作用域

变量的作用范围,既哪部分的程序可以使用该变量。

4. 链接点

外部链接

可以在一个多文件程序中的任何地方使用(auto 修饰的全局变量)

内部链接

在一个文件的任何地方使用(static 修饰的变量只可以在本文件内使用)

空链接

代码块作用域或者函数原型作用域(只能在函数中使用)

5. auto、static、extern、register

static:

1. 改变变量的作用域

2. 延长变量的生命周期

3. 只初始化一次

register:

register修饰的变量,希望分配一个寄存器来存放变量的值,但是不一定能分配到。如果分配不到就放在内存里。

extern:调用外部文件的

4G虚拟内存空间划分:

3G-4G:内核空间

0G-3G:用户空间

栈区(局部变量)

堆区(用户手动分配的空间)

.data段(初始化的全局变量和初始化的静态局部变量)

数据区 --->>> .bss段(未初始化的全局变量和未初始化的静态局部变量)

常量区(只读)

代码段(只读

【二】、动态内存分配

/****************************

*功能:在堆中分配空间

*参数:申请的堆空间的大小,单位是位

*返回值:

* 成功:返回一个可用的地址

* 失败:返回NULL

****************************/

void *malloc(size_t size);

#include

/*************************************

*功能:设置指针指向的内存空间

*参数:

* s:要设置的内存空间的首地址

* c:要写入内存中的值

* n: 写入多少个字节

*************************************/

void *memset(void *s, int c, size_t n);

/*************************************

*功能:释放堆空间

*参数:指向要释放的堆空间的首地址

*************************************/

void free(void *ptr);

注意:释放完堆空间以后,将指针赋值为NULL。

malloc函数的一般传参形式:

int *p = (int *)malloc(10*sizeof(int));

【三】、make工程管理工具

1. 简介

工程管理器,顾名思义,是指管理较多的文件

特点(优势):

构根据文件时间戳自动发现更新过的文件而减少编译的工作量

命名方式:

GNUmakefile、 makefile、 Makefile

Makefile的三要素:

目标

依赖

规则

Makefile的格式:

目标:依赖

规则

2. 自定义变量的四种赋值方式

1.递归展开方式VAR=var

特点:向后引用

2.简单方式 VAR:=var

3.?=定义变量

VAR ?= var

如果VAR变量在之前定义过,就使用之前的值,否则使用现在定义的值

4.+=定义变量

在原来变量的基础上增加值

VAR := add.o

VAR += sub.o

3. 预定义变量

4. 自动变量

依赖文件:

$+ 所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件

$^ 所有不重复的目标依赖文件,以空格分开

$< 第一个依赖文件的名称

$? 所有时间戳比目标文件晚的依赖文件,并以空格分开

目标文件:

$@ 目标文件的完整名称

$* 不包含扩展名的目标文件名称

5.

-C dir读入指定目录下的Makefile

-f file读入当前目录下的file文件作为Makefile

-i 忽略所有的命令执行错误

上一篇:c语言中输入输出函数案例解析

下一篇:Linux内核驱动的platform机制

热点文章推荐
华清学员就业榜单
高薪学员经验分享
热点新闻推荐
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2022 北京华清远见科技集团有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部