C およびアセンブリ (intelx8086) 言語で作業しようとしています。
私はまた、私の友人によって実装された 1 つのクラスを使用しています。それは
typedef enum data_10 {a=0,b=7,c=10,} data_10_type;
このクラスをビット単位で操作したい (別名、アセンブリで構築/破棄)。私の質問は、「enum」がどのくらいのメモリを必要とするかです。
コンパイラによって異なる場合がありますが、enum
通常はint
. ただし、いつでも使用できますsizeof( data_10_type );
印刷してみませんか?
/* C99 */
#include <stdio.h>
typedef enum { a = 0, b = 7, c = 10 } data_10_type;
printf("%zu\n", sizeof(data_10_type));
列挙子リストの識別子は、型int
( C11 §6.7.2.2 列挙指定子) を持つ定数として宣言されるため、sizeof(data_10_type)
多くの場合、 と等しくなりsizeof(int)
ますが、必須ではありません!
ところで、ビット単位のサイズが必要な場合は、1 バイトに何ビットあるかを示すCHAR_BIT
定数 ( で定義) を使用してください)。<limits.h>
/* C99 */
#include <limits.h>
#include <stdio.h>
typedef enum { a = 0, b = 7, c = 10 } data_10_type;
printf("%zu\n", sizeof(data_10_type) * CHAR_BIT);
列挙型は実際にはまったくメモリを消費しません。コンパイラによって理解され、コンパイル中に正しい数値が使用されます。これは int であり、そのサイズはシステムによって異なります。