LDD之資料型別

2021-07-25 18:26:21 字數 1053 閱讀 5076

linux核心資料型別分為三種:

1,標準c語言基本資料型別:在不同作業系統中記憶體空間大小不同

byte,char,short,int,long,long long

unsigined char,unsigned short,unsigned int, unsigned long

2,確定大小的資料型別:記憶體空間大小相同,便於移植;屬於linux核心特定型別,在其他作業系統不支援;

u8(typedef unsigned char u8;),u16(typedef unsigned short u16;),u32(typedef unsigned int u32;),u64(typedef unsigned long long u64;)

__u8,__u16,__u32,__u64(使用者和使用者空間互動資料)

s8,s16,s32,s64(帶符號型別)

c99標準定義的相關型別,uint8_t,uint16_t,uint32_t,uint64_t(屬於標準所有作業系統都支援)

3,用於特定核心物件的資料型別:型別語義明確;但是賦值的時候不清楚其型別;

用typedef定義特定用途的型別,例如:pid_t 

linux核心移植其他方面需要注意的問題:

2,頁面大小:頁面大小要使用page_size巨集定義,不要假定其值為4k,頁內偏移量使用page_shifit,不要假定其值為12;

3,記憶體對齊:記憶體對齊值為資料型別本身對齊值(占用記憶體空間起始位址為資料型別本身占用空間大小的整數倍)與指定對齊值二者取最小的值;記憶體對齊是硬體結構設計的限制,對記憶體對齊的資料讀寫可以在最少的記憶體週期內完成,達到記憶體優化的提高效能的目的;

4,位元組序:當cpu一次讀寫記憶體的資料寬度超過乙個位元組時,資料在記憶體中的存放就需要注意位元組序,這和體系結構相關,不同的體系結構位元組序不同,x86架構處理器採用小端位元組序;pci裝置採用小端序,網路裝置採用網路位元組序,當位元組序不同是需要調整位元組序:

unsigned  le32_to_cpu(le32);

unsigned cpu_to_le32(cpu);

位元組序不同就無法正常得到資料,就會導致非常嚴重的問題;

JS資料型別之基礎資料型別

基本資料型別是按值訪問的,也就是說我們可以操作儲存在變數中的實際的值 基本資料型別的值是不可改變的,任何方法都無法改變乙個基本資料型別的值。let name qin ling ling name lisi console.log name 輸出 lisi上面的例子看來name的值好像變了,這裡的基礎...

基礎之資料型別

基本型別包括位元組型 char 整型 int 和浮點型 float double 定義基本型別變數時,可以使用符號屬性signed unsigned 對於char int 和長度屬性short long 對於int double 對變數的取值區間和精度進行說明。下面列舉了dev c 下基本型別所佔位...

lua之資料型別

nil lua中特殊的型別,他只有乙個值 nil 乙個全域性變數沒有被賦值以前預設值為nil 給全域性變數負nil可以刪除該變數。booleans 兩個取值false和true。但要注意lua中所有的值都可以作為條件。在控制結構的條件中除了false和nil為假,其他值都為真。所以lua認為0和空串...