linux高階程式設計 前言 記憶體管理

2021-08-07 17:40:30 字數 2323 閱讀 1683

楊強 linux高階程式設計 day01 am

格式控制符「%p」中的p是pointer(指標)的縮寫。

指標的值是語言實現(編譯程式)相關的,但幾乎所有實現中,指標的值都是乙個表示位址空間中某個儲存器單元的整數。printf函式族中對於%p一般以十六進製制整數方式輸出指標的值,附加字首0x。

程式示例1

#include 

#include

main()

輸出:

0x234e010

0x234e030

0x234e050

0x234e070

0x234e090

0x234e0b0

問題:我們malloc分配的是4個位元組,為什麼結果是16個位元組?

參考

關於c語言的malloc函式以及記憶體洩漏的問題

malloc 函式詳解

malloc的原型:(void *)malloc(int size) 

malloc函式的返回值是乙個void型別的指標,引數為int型別的資料,即申請分配的記憶體大小,單位是位元組。記憶體分配成功之後,malloc函式返回這塊記憶體的首位址,你需要乙個指標來接受這個位址

記憶體越界將會出現的嚴重問題!!

記憶體越界分析與解決辦法

#include 

#include

int main()

輸出:

整個程式執行的記憶體結構

結論

任何程式的記憶體空間分成4個基本部分

1. **區 (位址基本是固定的)

2. 全域性棧區

3. 堆

4. 區域性棧

深入理解linux下動態庫鏈結器/載入器ld-linux.so.2

所以要執行程式,也可以通過

/lib/ld-linux.so ./test

# 我在ubuntu上是

# /l/lib64/ld-linux-x86-64.so.2 ./test

#include 

#include

#include

int add(int a, int b)

int a1 = 1;

static int a2 = 2;

const int a3 = 3;

main()

結果

各個變數的位址

結論

1. 記憶體分4個區

2. 各種變數有對應的存放區

3. 堆疊是一種管理記憶體的資料結構

delete通過呼叫free實現:delete負責呼叫析構函式,然後再呼叫free

new與new的區別:new只呼叫乙個構造器,new 會迴圈地對每個區域呼叫構造器

delete與delete的區別

函式呼叫棧空間的分配與釋放

PASCAL 高階程式設計 前言

前言turbo pascal是目前微機上最流行的pascal語言,它提供了集編輯 編譯 除錯和聯機幫助於一體的整合軟體開發環境,語言本身對標準pascal進行了大量的擴充套件,具有高效的數值運算能力 作業系統的低階呼叫功能 內嵌式組合語言等強有力的軟體開發支援,可以用於任何型別 任何規模的系統軟體和...

wodpress高階教程 前言

前面的教程系統的講解了wordpress主題製作 儘管不是很全面,我們會在後面的教程中慢慢補充 到了現在,就學習用wordpress做cms系統。學習本部分教程,需要具備一定的php知識。本部分教程簡介 現在很多人製作私有主題的時候,知識單純的使用wordpress的文章和分類,有的部分要顯示單獨的...

C專家程式設計 前言

前言之程式設計挑戰 計算機時間,研究time t什麼時候重新回到開始?date1.c include include int main 0 time t是一種系統基本資料型別,可被稱為日曆時間,它代表自unix紀元以來utc所經歷的秒數值,unix紀元是1970 01 01 00 00 00,utc...