C语言内存/指针相关
內存
數據類型–更好的內存管理
數據類型:固定大小內存的別名
typedef
結構體的別名 typedef struct Student MyStudent
給指針起別名 typedef char * PCHAR
給變量起別名 typedef longlong mylong_t
注意:
void類型不能typedef
void只能對函數返回和參數的限定
void* 可以指向任何類型的數據(不需要強制轉換)
定義一個變量,編譯器必須知道分配多少內存
sizeof
返回的是為這個變量開辟的大小
返回數據類型是unsigned int
sizeof計算數組
內存區
| 內存分區 | 備注 |
命令行參數 | env,args |
棧 ↓ | 高地址向低地址 |
共享庫 | |
堆 ↑ | 低地址向高地址 |
未初始化數據段 | .bss |
初始化數據段 | .data |
代碼段(靜態庫) | .text |
受保護頭 | (void*)0 |
int a ; // 外部鏈接
static int a; // 內部鏈接
"helloworld" //常量區
const修飾的全局變量 // 常量區 一旦初始化 不能修改
程序運行后:
堆區 // 手動開辟 手動釋放,程序員不釋放,在程序結束,操作系統會釋放
棧區 編譯器自動分配、釋放
全局靜態區(全局變量和靜態變量是放在一起的,初始化和未初始化會分開存放)
全局區 全局變量(未初始化會成0)
靜態區
常量區 不能修改,程序結束由操作系統釋放?const char * p = "helloworld"
靜態
全局靜態變量和局部靜態變量都存儲在靜態區 都在運行期間合法有效
static是內部鏈接
編譯
頭文件不參與編譯,每一個.c是編譯單元
編譯器獨立編譯每一個.c文件
頭文件只放聲明,不能放定義
extern
不寫默認是外連接的(extern)
表示 符號是存在的,先編譯通過,讓鏈接器找符號在哪
const
const 全局變量 在常量區 直接間接都不能修改
const 局部變量,在棧上,可以間接修改
volatile
阻止編譯器對變量進行優化,每次重新從內存(變量的地址)中獲取值
聲明:
本文于網絡整理,版權歸原作者所有,如來源信息有誤或侵犯權益,請聯系我們刪除或授權事宜。
總結
以上是生活随笔為你收集整理的C语言内存/指针相关的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 可转债转股价后多久可以得到股票?
- 下一篇: 常用于单片机的接口适配器模式C语言实现