資料儲存,分配

2021-10-05 01:40:25 字數 1656 閱讀 9146

大小端模式我們常用的x86 dsp arm 為小端模式,而keil c51為大端模式

在程式中,對變數的資料通過位址訪問時,則應該考慮大小端,而直接通過變數名字訪問(讀取,寫入)時,則不必考慮,是對資料本身的值的操作

整型資料:

在記憶體中以補碼的形式儲存,處理器·只會加法操作

補碼:

正數的補碼,反碼,原碼相同

負數:反碼加1,得到補碼,反碼:原碼除過符號位其他位取反

浮點型資料

二進位制浮點型:

雙精度浮點型m(52bit) e(11bit)

浮點型在記憶體中的儲存與讀取

e為乙個無符號整數,存入記憶體時e的真實值必須再加上乙個中間值,對於8位的,中間值是127,對於11位的e,中間的值是1023,比如:2^10的e是10,所以儲存成32位浮點數時,必須加127,儲存為100010001 即137

儲存m時,預設這個數的第一位是1,所以可以被捨去,只儲存後面的部分,比如1.01,只儲存01,後面補到000000000*(23位或者52)等到讀取時,再將一加上去

指數e從記憶體中取出的三種情況:

(1)e全部為0

這時,浮點的指數e等於 1-127 (或者1-1023)即為真實值,有效數字m不再加上第一位的1,而是還原為0.******x的小數

(2)e全為1

這時,如果有效數字全為0,表示無窮大

(3)其他情況

指數e計算值減去127 或者1023 得到真實值,再將有效數字m前面加上第一位的1。

動態記憶體管理

動態記憶體分配函式:

void

*malloc

( size_t size )

;

標頭檔案:

入口引數: size 分配的位元組數

返回值是void*型別的指標,因此需要使用者決定記憶體空間的型別

void

*calloc

( size_t num, size_t size )

;

標頭檔案:

入口引數:size 分配的位元組數

返回值是void*型別的指標,因此需要使用者決定記憶體空間的型別

函式mallloc與calloc的差別就在於,calloc會在位址返回之前將申請到的位址的每個位元組初始化為0

動態記憶體釋放函式:

void

free

(void

*memblock )

;

標頭檔案:

函式功能:釋放動態開闢的記憶體

返回值; 空

調整分配後的記憶體大小

如果申請的空間大小不夠用,則可以使用如下的函式進行調整空間的大小

void

*realloc

(void

*memblock, size_t size )

;

標頭檔案:

函式功能:調整空間的大小

返回值; 調整之後的位址,可能與之前的空間位置不同。

靜態儲存分配和動態儲存分配

通常定義變數或者物件,編譯器在編譯時都可以根據該變數或物件的型別知道所需記憶體空間的大小,從而系統在適當的時候為他們分配確定的儲存空間,這種記憶體分配被稱為靜態儲存分配。有些操作物件只有在程式執行時才能確定,這樣編譯器在編譯時就無法為他們預定儲存空間,只能在程式執行時,系統根據執行時的要求進行記憶體...

動態儲存分配

動態儲存分配 在我們使用記憶體時,堆是一塊很大的記憶體塊,用於執行時分配一些小的儲存空間。c 中動態儲存分配用 new和 delete 分配完記憶體需要判斷分配是否成功 分配了新的記憶體空間,舊資料塊的資料拷貝到新的空間中,舊的記憶體需要釋放以便其他部分需要新記憶體塊的時候可以使用,如果沒有釋放就會...

alloc儲存分配

define allocsize 10000 static char allocbuf allocsize static char allocp allocbuf allocp是外部變數!指向陣列開頭 char alloc int n else return 0 alloc n 函式返回乙個指向n個...