apcs-gnu ABI中的结构布局

时间:2017-05-04 15:12:01

标签: c gcc struct arm elf

this code

struct S {     unsigned char ch[2]; };

int main(void)
{
    _Static_assert( sizeof(struct S) == 2, "size was not 2");
}

使用带有ABI apcs-gnu(又名OABI或EABI版本0)的ARM的GCC(各种版本),我得到断言失败。事实证明结构的大小是4

我可以使用__attribute__((packed))来解决这个问题。但我的问题是:

  • 制作此结构大小4的基本原理是什么?
  • 是否有任何文档指定此ABI中结构的布局?

在ARM网站上,我找到了aapcs(EABI第5版)的文档,该文档将此结构指定为大小为2;但我找不到任何关于apcs-gnu的内容。

1 个答案:

答案 0 :(得分:2)

这是特定于海湾合作委员会的决定,以权衡业绩规模。它可以用 var ss = SpreadsheetApp.openById("SpreadsheetID"); var sheetMAT = ss.getSheetByName("Sheet3"); var data = sheetMAT.getRange(3, 2, sheetMAT.getLastRow() - 1, 4).getValues(); var temporaryData = []; var dataReadyLine = []; function getReadyLine() { var rawData = sheetMAT.getRange(3, 2, sheetMAT.getLastRow() - 1, 4).getValues(); Logger.log(rawData[0][3]); for (var i=0; i<=rawData.length; i++) { if (rawData[i][3] === "A Ready Line") { temporaryData.push(data[i][1], data[i][0]); dataReadyLine.push(temporaryData); temporaryData = []; } } return dataReadyLine; }; 覆盖。

摘自source code

-mstructure-size-boundary=8