0

私の質問が適切かどうかわかりません。コードがある場合...

int a[2];

&a[0]%8==1操作 を確認して実行したい場合a[0]= (a[0] & ~7)、これは有効な方法ですか?

4

1 に答える 1

3

配列のアドレスを決定するのはあなたではなく、コンパイル+ロード時に決定するのはコンパイラ+リンカです。(そして、配列に割り当てることはできません。配列の要素にのみ割り当てることができます。)

適切に調整されたメモリが必要な場合は、malloc()からの関数を使用して<stdlib.h>ください。mallocC言語標準は、によって返されるポインタが任意の型に対して適切に整列されることを保証します。いずれかのタイプの最小要件が8の場合、これは8バイトに整列されたポインターになります。だからあなたがすべきことは:

  #include <stdlib.h>

  int main (void)
  {
      int *a;

      a = malloc (2 * sizeof(*a));
      if (a == NULL) { /* Handle out of memory. */ }
      /* ... */
  }

int a[2];で宣言されたintの配列には、最速の操作をサポートするアラインメントがある可能性が非常に高いため、これは実際には少しやり過ぎです。8バイトのアラインメントを強制することが有利だと思うのはなぜですか?

于 2012-05-14T08:34:28.727 に答える