class wt
{
public:
char i;
  int f;
  char j;
};
我跟踪了一下,在内存在中,i占4个字节,f占4个字节,j占4个字节。为什么字符是4个字节?

解决方案 »

  1.   

    class wt
    {
    public:
      char j;
      char i;
      int f;
      
    };
    //这样呢?
      

  2.   

    #pragma pack( n )
    n默认=4
    内存按4字节对齐
      

  3.   

    为了不出乱子,内存必须对齐。
    现在是32位机,所以按4字节对齐。
    在64位机里,要按8字节对齐。32位机:
    char i; 占4个字节
    char i[2]; 占4个字节
    char i[4]; 占4个字节
    char i[5]; 占8个字节
    char i[8]; 占8个字节
    char i[10]; 占12个字节short int i; 占4个字节
    short int i[2]; 占4个字节
    short int i[3]; 占8个字节
    short int i[4]; 占8个字节
    short int i[5]; 占12个字节int i;占4个字节
    int i[2];占8个字节
    int i[3];占12个字节明白了吧?
      

  4.   

    icansaymyabc(学习与进步) :
         请问那里来的规则我怎么没听说过?不过听起来倒是蛮有道理的