При переписывании простенькой программы с виндовского Microfoft Visual C++ к съедобному для GCC виду, обнаружил следующее. Есть некоторая структура, размером 14 байт. В памяти она округляется до 16. При записи в файл записываются 16, при чем два байта мусора появляются именно в середине. Кусок кода:
#include<stdio.h>
typedef unsigned char BYTE;
typedef unsigned short int WORD;
typedef unsigned int DWORD;
typedef long int LONG;
typedef struct tagBITMAPFILEHEADER {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER;
void main(int argc,char **argv)
{
BITMAPFILEHEADER header;
header.bfType=0;
header.bfSize=0;
header.bfReserved1=0;
header.bfReserved2=0;
header.bfOffBits=0;
FILE *t;
t=fopen("tst","wb");
fwrite(&header,sizeof(header),1,t);
fclose(t);
return;
}
0000 00000000 0000 0000 00000000
0000 4EED 00000000 0000 0000 00000000