サーチ…


前書き

GNU Cコンパイラには、C標準で規定されていないいくつかの優れた機能があります。これらの拡張機能は、システムソフトウェアで頻繁に使用され、パフォーマンスの最適化に最適なツールです。

パックされた属性

packedは、メモリー要件を最小限に抑えるために構造体および共用体で使用される可変属性です。

#include <stdio.h>
struct foo {
    int a;
    char c;
};

struct __attribute__((__packed__))foo_packed {
    int a;
    char c;
};

int main()
{
    printf("Size of foo: %d\n", sizeof(struct foo));
    printf("Size of packed foo: %d\n", sizeof(struct foo_packed));
    return 0;
}

私の64ビットLinuxでは、

  • struct fooのサイズ= 8バイト
  • 構造体のサイズfoo_packed = 5バイト

packed属性は、コンパイラがメモリの整列を維持するために実行する構造体パディングを抑制します。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow