當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 學(xué)習(xí)筆記 > 變量存儲(chǔ)類型 動(dòng)態(tài)內(nèi)存分配詳解
【一】、變量的存儲(chǔ)類型
1. 變量的定義
變量是對(duì)內(nèi)存空間的抽象
2. 變量的生命周期
變量在內(nèi)存中的存儲(chǔ)時(shí)間。既變量從申請(qǐng)內(nèi)存到釋放內(nèi)存的一段時(shí)間。
3. 變量的作用域
變量的作用范圍,既哪部分的程序可以使用該變量。
4. 鏈接點(diǎn)
外部鏈接
可以在一個(gè)多文件程序中的任何地方使用(auto 修飾的全局變量)
內(nèi)部鏈接
在一個(gè)文件的任何地方使用(static 修飾的變量只可以在本文件內(nèi)使用)
空鏈接
代碼塊作用域或者函數(shù)原型作用域(只能在函數(shù)中使用)
5. auto、static、extern、register
static:
1. 改變變量的作用域
2. 延長(zhǎng)變量的生命周期
3. 只初始化一次
register:
register修飾的變量,希望分配一個(gè)寄存器來存放變量的值,但是不一定能分配到。如果分配不到就放在內(nèi)存里。
extern:調(diào)用外部文件的
4G虛擬內(nèi)存空間劃分:
3G-4G:內(nèi)核空間
0G-3G:用戶空間
棧區(qū)(局部變量)
堆區(qū)(用戶手動(dòng)分配的空間)
.data段(初始化的全局變量和初始化的靜態(tài)局部變量)
數(shù)據(jù)區(qū) --->>> .bss段(未初始化的全局變量和未初始化的靜態(tài)局部變量)
常量區(qū)(只讀)
代碼段(只讀
【二】、動(dòng)態(tài)內(nèi)存分配
/****************************
*功能:在堆中分配空間
*參數(shù):申請(qǐng)的堆空間的大小,單位是位
*返回值:
* 成功:返回一個(gè)可用的地址
* 失。悍祷豊ULL
****************************/
void *malloc(size_t size);
#include
/*************************************
*功能:設(shè)置指針指向的內(nèi)存空間
*參數(shù):
* s:要設(shè)置的內(nèi)存空間的首地址
* c:要寫入內(nèi)存中的值
* n: 寫入多少個(gè)字節(jié)
*************************************/
void *memset(void *s, int c, size_t n);
/*************************************
*功能:釋放堆空間
*參數(shù):指向要釋放的堆空間的首地址
*************************************/
void free(void *ptr);
注意:釋放完堆空間以后,將指針賦值為NULL。
malloc函數(shù)的一般傳參形式:
int *p = (int *)malloc(10*sizeof(int));
【三】、make工程管理工具
1. 簡(jiǎn)介
工程管理器,顧名思義,是指管理較多的文件
特點(diǎn)(優(yōu)勢(shì)):
構(gòu)根據(jù)文件時(shí)間戳自動(dòng)發(fā)現(xiàn)更新過的文件而減少編譯的工作量
命名方式:
GNUmakefile、 makefile、 Makefile
Makefile的三要素:
目標(biāo)
依賴
規(guī)則
Makefile的格式:
目標(biāo):依賴
2. 自定義變量的四種賦值方式
1.遞歸展開方式VAR=var
特點(diǎn):向后引用
2.簡(jiǎn)單方式 VAR:=var
3.?=定義變量
VAR ?= var
如果VAR變量在之前定義過,就使用之前的值,否則使用現(xiàn)在定義的值
4.+=定義變量
在原來變量的基礎(chǔ)上增加值
VAR := add.o
VAR += sub.o
3. 預(yù)定義變量
4. 自動(dòng)變量
依賴文件:
$+ 所有的依賴文件,以空格分開,并以出現(xiàn)的先后為序,可能包含重復(fù)的依賴文件
$^ 所有不重復(fù)的目標(biāo)依賴文件,以空格分開
$< 第一個(gè)依賴文件的名稱
$? 所有時(shí)間戳比目標(biāo)文件晚的依賴文件,并以空格分開
目標(biāo)文件:
$@ 目標(biāo)文件的完整名稱
$* 不包含擴(kuò)展名的目標(biāo)文件名稱
5.
-C dir讀入指定目錄下的Makefile
-f file讀入當(dāng)前目錄下的file文件作為Makefile
-i 忽略所有的命令執(zhí)行錯(cuò)誤