楊強 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...