樹莓派上enum的size一會爲4一會爲8,咋回事?

最近在嘗試用樹莓派控制海康機器人的相機,採用JAVA技術棧,發現相同的SDK接口函數

int MV_CC_SaveImageEx2(
  IN void* handle, 
  MV_SAVE_IMAGE_PARAM_EX    *pSaveParam
);

,用JNI調用OK,用JNA調用就
0x80000004錯誤的參數
經過幾天艱苦的定位,推測是因爲MV_SAVE_IMAGE_PARAM_EX裏的MvGvspPixelType枚舉字段爲8字節,而JNA分配的native內存爲4字節,從而引發問題。
爲什麼樹莓派這麼個armv71平臺,其枚舉類型會出現8字節的size?老實說我目前也不知道原因,不過我想先記錄下異常現象。

復現異常

爲了方便說明問題,將MvGvspPixelType簡化(已將無關的宏消除)成PixelType

#include <stdio.h>
enum PixelType{
    MONO = -1,
    RGB = 0x80000000
};

int main(){
    printf("sizeof enum PixelType = %d\n", sizeof(enum PixelType));
    printf("MONO = 0x%x\n", MONO);
    printf("RGB = 0x%llx\n", RGB);
    return 0;
}

運行輸出結果

sizeof enum PixelType = 8
MONO = 0xffffffff
RGB = 0x80000000

繼續實驗

把末項的最高位改成0

如果將RGB

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章