Struct 带大小问题的Mips 32位和结构(C)

Struct 带大小问题的Mips 32位和结构(C),struct,mips,cpu-architecture,mips32,Struct,Mips,Cpu Architecture,Mips32,我有下面的C代码 struct foo { char a; struct innerStruct table[2]; int c;  bool b; double d; short e; float f; double g; char *cptr; void *vptr; int x; } typedef struct { char c1; double *dptr; char c2; } innerStruc

我有下面的C代码

struct foo {
   char a;
   struct innerStruct table[2];
   int c;
   bool b;
   double d;
   short e;
   float f;
   double g;
   char *cptr;
   void *vptr;
   int x;
}

typedef struct {
   char c1;
   double *dptr;
   char c2;
} innerStruct;

这个代码
struct foo
将在我的内存中占用多少字节?我的意思是,如果一个int取4个字节,一个char取1,我应该在它的基础上增加(4+1)。还有,如果我们可以改变结构中这些元素的顺序,那么结构foo的最小大小是多少?如果我们将其更改为64位而不是正常的32位,会发生什么?它会影响存储在内存中的总大小吗?结构是否必须对齐?如果是,为什么?

一个问题应该是一个问题。MIPS程序员体系结构第二卷回答了您的对齐问题:字访问需要字对齐,双字访问需要双字对齐。您能说得更具体一点吗?我的意思是,如果它必须是字对齐的,这意味着它加载4字节,而双字必须同时加载8字节。这不能满足我的问题,如果我在同一个结构中有一个字符,例如一个double,会发生什么。结构应该是9字节吗?或者必须是16?这取决于成员的顺序。此外,“必须一次加载8”不是双字对齐要求的含义。如果表示,如果试图访问内存中的双字,则地址的3个最低有效位必须为0。单词也是一样,但它是最不重要的两位。嘿,谢谢你回答我的问题。如果可能的话,我可以再问你一个问题吗?为什么我们必须在我们的结构中进行此验证?因为这是一个硬件要求,如果不这样做,处理器将发出AddressError异常信号。