为什么要讨论内存对齐问题呢?因为最近在写BMP头文件的时候出现了些问题,后来发现是结构体中内存对齐所致的。
当时情况如下:
16 typedef struct
17 {
18 uint16_t identifier;
19 uint32_t file_size;
20 uint16_t reserved1;
21 uint16_t reserved2;
22 uint32_t bmp_offset;
23 }BITMAPFILEHEADER;
.
.
.
// 对这个结构体赋值
277 BITMAPFILEHEADER bfh;
278 memset(&bfh, 0, sizeof(BITMAPFILEHEADER));
279 bfh.identifier = 0x4d42; // 'B','M'
280 bfh.file_size = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + rgb24_size;
281 bfh.reserved1 = 0;
282 bfh.reserved2 = 0;
283 bfh.bmp_offset = bfh.file_size - rgb24_size;
.
.
.
// 把这个结构体写入到头文件中
304 if (fwrite(&bfh, 14, 1, fp) < 0){
305 perror("write_rgb24_bmp:fwrite BITMAPFILEHEADER:");
306 return -1;
307 }
最新评论