Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Bahasa C

Penggunaan Memori Efisien dengan Bit Field C

Misalkan program C Anda memiliki sejumlah variabel TRUE/FALSE yang dikelompokkan dalam struktur bernama status, sebagai berikut −

 struct { unsigned int widthValidated; unsigned int heightValidated; } status; 

Struktur ini membutuhkan 8 byte ruang memori, tetapi sebenarnya kita akan menyimpan nilai 0 atau 1 pada setiap variabel. Bahasa pemrograman C menawarkan cara yang lebih baik untuk memanfaatkan ruang memori dalam situasi seperti ini.

Jika Anda menggunakan variabel semacam itu di dalam struktur, Anda dapat menentukan lebar variabel yang memberitahu kompiler C bahwa Anda akan menggunakan sejumlah byte tersebut. Misalnya, struktur di atas dapat ditulis ulang sebagai berikut −

 struct { unsigned int widthValidated : 1; unsigned int heightValidated : 1; } status; 

Struktur di atas membutuhkan 4 byte ruang memori untuk variabel status, tetapi hanya 2 bit yang akan digunakan untuk menyimpan nilai.

Jika Anda akan menggunakan hingga 32 variabel, masing-masing dengan lebar 1 bit, maka struktur status tetap akan menggunakan 4 byte. Namun begitu Anda memiliki 33 variabel, itu akan mengalokasikan slot memori berikutnya dan mulai menggunakan 8 byte. Mari kita periksa contoh berikut untuk memahami konsep ini −

Live Demo
 #include <stdio.h> #include <string.h> /* define simple structure */ struct { unsigned int widthValidated; unsigned int heightValidated; } status1; /* define a structure with bit fields */ struct { unsigned int widthValidated : 1; unsigned int heightValidated : 1; } status2; int main( ) { printf( "Memory size occupied by status1 : %d\n", sizeof(status1)); printf( "Memory size occupied by status2 : %d\n", sizeof(status2)); return 0; } 

Ketika kode di atas dikompilasi dan dieksekusi, hasilnya adalah sebagai berikut −

 Ukuran memori yang diisi oleh status1 : 8 Ukuran memori yang diisi oleh status2 : 4 

Deklarasi Bit Field

Deklarasi sebuah bit-field memiliki bentuk berikut di dalam struktur −

 struct { type [member_name] : width ; }; 

Tabel berikut menjelaskan elemen-elemen variabel dari sebuah bit field −

Sr.No. Elemen & Deskripsi
1

type

Tipe integer yang menentukan bagaimana nilai bit-field ditafsirkan. Tipe dapat berupa int, signed int, atau unsigned int.

2

member_name

Nama dari bit-field.

3

width

Jumlah bit dalam bit-field. Lebar harus lebih kecil atau sama dengan lebar bit dari tipe yang ditentukan.

Variabel yang didefinisikan dengan lebar yang telah ditentukan disebut bit fields. Sebuah bit field dapat menampung lebih dari satu bit; misalnya, jika Anda perlu variabel untuk menyimpan nilai dari 0 hingga 7, maka Anda dapat mendefinisikan bit field dengan lebar 3 bit sebagai berikut −

 struct { unsigned int age : 3; } Age; 

Definisi struktur di atas memberitahu kompiler C bahwa variabel age akan hanya menggunakan 3 bit untuk menyimpan nilai. Jika Anda mencoba menggunakan lebih dari 3 bit, maka kompiler tidak akan mengizinkannya. Mari kita coba contoh berikut −

Live Demo
 #include <stdio.h> #include <string.h> struct { unsigned int age : 3; } Age; int main( ) { Age.age = 4; printf( "Sizeof( Age ) : %d\n", sizeof(Age) ); printf( "Age.age : %d\n", Age.age ); Age.age = 7; printf( "Age.age : %d\n", Age.age ); Age.age = 8; printf( "Age.age : %d\n", Age.age ); return 0; } 

Ketika kode di atas dikompilasi, akan muncul peringatan, dan saat dieksekusi, hasilnya adalah sebagai berikut −

 Sizeof( Age ) : 4 Age.age : 4 Age.age : 7 Age.age : 0 

Bahasa C

  1. Menguasai Operator Bitwise dan Bit Shift C#: Panduan Komprehensif
  2. Empat Pola Terbukti untuk Fungsi yang Dibuat Pengguna dalam C
  3. Cara Meneruskan Array 1D dan 2D ke Fungsi dalam C – Panduan Praktis
  4. Menguasai Struct dan Pointer C: Panduan Praktis
  5. Kata Kunci Java this: Penggunaan Praktis, Konstruktor, dan Lainnya
  6. Menguasai Enkapsulasi Java: Panduan Praktis untuk Penyembunyian Data
  7. Struct C++ Dijelaskan dengan Contoh Praktis
  8. Menguasai Fungsi C: Struktur, Deklarasi, dan Praktik Terbaik
  9. Menguasai Argumen Variabel dalam C: Panduan Praktis
  10. Menguasai Integrasi di MATLAB: Dari Antiturunan hingga Jumlah Riemann