前端做項目有哪些網(wǎng)站全網(wǎng)營銷圖片
1.6 Packed結(jié)構(gòu)體
默認情況下,Zig中的所有結(jié)構(gòu)體字段自然對齊到@alignOf(FieldType)(ABI大小),但沒有定義布局。有時,您可能希望具有不符合您的C ABI的定義布局的結(jié)構(gòu)體字段。packed結(jié)構(gòu)體允許您對結(jié)構(gòu)體字段進行極其精確的控制,允許您逐位放置字段。
在packed結(jié)構(gòu)體內(nèi)部,Zig的整數(shù)占用其位寬的空間(即,u12的@bitSizeOf為12,意味著它將在packed結(jié)構(gòu)體中占用12位)。布爾值也占用1位,這意味著您可以輕松實現(xiàn)位標志。
const MovementState = packed struct {running: bool,crouching: bool,jumping: bool,in_air: bool,
};test "packed struct size" {try expect(@sizeOf(MovementState) == 1);try expect(@bitSizeOf(MovementState) == 4);const state = MovementState{.running = true,.crouching = true,.jumping = true,.in_air = true,};_ = state;
}
1.7 位對齊指針
類似于對齊指針,位對齊指針在其類型中有額外的信息,這說明了如何訪問數(shù)據(jù)。當數(shù)據(jù)不是字節(jié)對齊時,這是必要的。位對齊信息通常需要尋址packed結(jié)構(gòu)體內(nèi)部的字段。