[英]using calloc to create bitmap in C
如果我將int數組用作位圖,則分配的大小將為(1 << 28)/ 32,對嗎? 因為int是32位...? 而且,如果我想在調用任何函數之前調用該空間,是否需要做一些特別的事情? 編輯
我正在嘗試使用calloc擁有一個位數組,在這里我可以檢查並在該數組位置設置位。
我的嘗試:
int bitmap[] = calloc(1<<28, 1);
和
int bitmap[] = (int*) calloc(1<<28, 1);
我不確定位圖是什么類型或將calloc強制轉換為...
任何幫助,將不勝感激!
您不能直接在C語言中使用“位數組”。您需要使用掩碼/位移位運算符以較大單位(至少8位char
)訪問單個位。
另外,您嘗試使用的正確語法是:
int *bitmap = calloc(1<<28, sizeof(int));
這將分配(1 << 28) int
s的數組。
像這樣訪問它們:
int i;
for (i = 0; i < (1<<28); ++i) {
bitmap[i] = ...
}
首先,最好將位圖的基礎類型定義為unsigned int
而不是signed int。
當您使用返回指針的函數calloc時,已定義對象的類型也應為指針。
unsigned int *bitmap = calloc( 1u << 28, sizeof( unsigned int ) );
雖然我懷疑1u << 28的第一個值確實是您真正需要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.