Lompat ke konten Lompat ke sidebar Lompat ke footer

Fakta tentang Sizeof pada Bahasa C

Pada bahasa C dan C++ operator sizeof() digunakan untuk menentukan ukuran dari sebuah tipe data atau variabel. Bentuk ekspresi yang ditulis dalam sizeof() tidak akan pernah dieksekusi.


Sebelum memahami lebih dalam materi tentang Fakta tentang Sizeof pada Bahasa C, terlebih dahulu pelajari materi tentang: Printf dengan Operator Increment pada Bahasa C, Titik Sekuensial Bahasa C dan Fungsinya, dan Penjumlahan Tanpa Operator Aritmatika Bahasa C.

Contoh:

// Program bahasa C untuk

// mendemonstrasikan bahwa

// ekspresi yang ditulis dalam

// operator sizeof() tidak

// akan pernah dieksekusi

#include <stdio.h> 

 

int main(){ 

 

// Hasil cetakan pada operator

// printf pada sizeof tidak

// akan dieksekusi, hanya tipe

// return printf saja yang

// nilainya dikembalikan dan

// dievaluasi ukuran nilainya

// berdasarkan opeartor sizeof

// tersebut.

int a = sizeof(printf("hey")); 

 

printf("%d", a); 

 

return 0

}

Output:
4

Meskipun diberikan tanda nilai untuk sizeof(), namun nilai perubahannya tidak akan pernah ditampilkan.

Contoh:

// Program bahasa C untuk

// mendemonstrasikan bahwa

// ekspresi yang ditulis pada

// operator sizeof() tidak

// akan dieksekusi pada

// program.

#include <stdio.h> 

 

int main() { 

int a = 5

int b = sizeof(a = 6); 

printf("a = %d, b = %d\n", a, b); 

return 0

}

Output:
a = 5, b = 4


sizeof adalah operator dalam bahasa pemrograman C yang digunakan untuk mendapatkan ukuran (dalam byte) dari sebuah tipe data atau objek. Operator ini sangat penting dalam C, terutama dalam manajemen memori dan operasi dengan tipe data yang berbeda. Berikut ini adalah beberapa fakta penting tentang sizeof dalam bahasa C:
  • Pengukuran Ukuran dalam Byte: sizeof mengembalikan ukuran dalam byte dari tipe data atau objek yang diukur. Hasil yang dikembalikan adalah dalam bentuk tipe data size_t, yang merupakan tipe data unsigned integer yang cukup besar untuk menyimpan ukuran dari objek terbesar yang dapat dialokasikan oleh implementasi C.
  • Penggunaan pada Tipe Data Primitif: sizeof dapat digunakan untuk mengetahui ukuran dari tipe data primitif seperti int, float, double, char, dan lain-lain. Misalnya:
    • printf("Ukuran int: %zu byte\n", sizeof(int));
    • printf("Ukuran char: %zu byte\n", sizeof(char));
    • printf("Ukuran float: %zu byte\n", sizeof(float)); 
    • // Ukuran dari tipe data ini dapat bervariasi tergantung pada arsitektur sistem dan kompilator yang digunakan.
  • Penggunaan pada Array dan Struct: sizeof juga dapat digunakan untuk mengetahui ukuran dari array dan struktur (struct). Ketika digunakan pada array, sizeof mengembalikan ukuran total dari semua elemen arrayUntuk struktur, sizeof mengembalikan ukuran total dari semua anggota struktur, termasuk padding yang mungkin ditambahkan oleh kompilator untuk penyejajaran memori.
    • struct S {char c; int i;}; printf("Ukuran struct S: %zu byte\n", sizeof(struct S));
  • Pointer dan sizeof: Ketika digunakan pada pointer, sizeof mengembalikan ukuran dari pointer itu sendiri, bukan ukuran data yang ditunjuk oleh pointer. Misalnya:
    • int *ptr;
    • printf("Ukuran pointer int: %zu byte\n", sizeof(ptr)); 
    • // Ukuran pointer biasanya 4 atau 8 byte, tergantung pada arsitektur sistem (32-bit atau 64-bit).
  • Evaluasi pada Kompilasi: sizeof adalah operator yang dievaluasi pada waktu kompilasi, bukan pada waktu runtime. Ini berarti bahwa sizeof tidak memiliki overhead runtime dan dapat digunakan dalam konteks yang membutuhkan evaluasi waktu kompilasi, seperti deklarasi array dan pengalokasian memori.
  • Makro dan sizeof: sizeof sering digunakan dalam makro untuk membuat kode lebih aman dan portabel. Sebagai contoh:
    • #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
    • // Makro ini dapat digunakan untuk menghitung jumlah elemen dalam sebuah array dengan membagi ukuran total array dengan ukuran dari satu elemen.

Meskipun operator sizeof sangat berguna dalam bahasa C, ada beberapa kekurangan dan keterbatasan yang perlu diperhatikan:
  • Tidak Mengukur Ukuran Data yang Dituju oleh Pointer: sizeof hanya mengembalikan ukuran pointer, bukan ukuran data yang ditunjuk oleh pointer. Hal ini bisa menyebabkan kesalahan jika programmer tidak sadar bahwa program mendapatkan ukuran pointer, bukan data yang ditunjuknya.
    • int *ptr;
    • printf("Ukuran data yang ditunjuk oleh pointer: %zu byte\n", sizeof(*ptr)); // Mengukur data yang ditunjuk
    • printf("Ukuran pointer: %zu byte\n", sizeof(ptr)); // Mengukur pointer itu sendiri
  • Tidak Berlaku untuk Data yang Dialokasikan Dinamis: sizeof tidak dapat digunakan untuk mengetahui ukuran data yang dialokasikan secara dinamis menggunakan malloc atau fungsi alokasi memori lainnya. Ini karena sizeof dievaluasi pada waktu kompilasi dan tidak memiliki informasi tentang ukuran memori yang dialokasikan secara dinamis pada waktu runtime.
    • int *arr = malloc(10 * sizeof(int));
    • // sizeof(arr) hanya akan memberikan ukuran pointer, bukan ukuran data yang dialokasikan
  • Penanganan Array sebagai Pointer: Saat digunakan pada parameter fungsi yang adalah array, sizeof hanya akan mengembalikan ukuran pointer karena array "diturunkan" menjadi pointer saat dilewatkan ke fungsi. Ini bisa menimbulkan kebingungan karena ukuran sebenarnya dari array tidak dapat diperoleh dengan sizeof dalam konteks tersebut.
    • void foo(int arr[]) {printf("Ukuran array dalam fungsi: %zu byte\n", sizeof(arr)); // Hanya memberikan ukuran pointer}
  • Padding dalam Struct: sizeof mencakup padding yang mungkin ditambahkan oleh kompilator untuk penyejajaran memori, yang bisa membingungkan terutama jika tidak memahami bagaimana kompilator menangani penyejajaran. Ini dapat menyebabkan perbedaan antara ukuran yang diharapkan dan ukuran yang dilaporkan oleh sizeof.
    • struct S { char c; int i;};
    • printf("Ukuran struct S: %zu byte\n", sizeof(struct S)); // Mungkin lebih besar dari jumlah byte individu
  • Ketergantungan pada Platform dan Kompilator: Ukuran yang dikembalikan oleh sizeof dapat bervariasi tergantung pada arsitektur sistem (32-bit vs. 64-bit) dan implementasi kompilator. Hal ini dapat mempengaruhi portabilitas kode yang mengandalkan nilai tertentu dari sizeof.
  • Tidak Menyediakan Informasi Tipe yang Mendalam: sizeof hanya memberikan informasi ukuran, bukan tipe. Hal ini berarti bahwa meskipun pengembang bisa mengetahui berapa byte yang digunakan, pengembang tetap tidak dapat menentukan apakah tipe tersebut adalah int, short, atau float, misalnya, hanya berdasarkan ukuran.

Secara keseluruhan, meskipun sizeof adalah alat yang sangat berguna, penting untuk memahami batasannya dan menggunakan dengan hati-hati, terutama saat bekerja dengan pointer, alokasi memori dinamis, dan struktur data kompleks.

Kesimpulan

Operator sizeof dalam bahasa C adalah alat yang kuat dan fleksibel untuk manajemen memori dan operasi data. Pemahaman yang tepat tentang cara kerjanya dan bagaimana menggunakannya dengan benar sangat penting untuk penulisan kode C yang efisien dan aman. Dengan sizeof, programmer dapat menghindari kesalahan umum seperti buffer overflow dan dapat memastikan bahwa kode portabel di berbagai platform.

5 komentar untuk "Fakta tentang Sizeof pada Bahasa C"

  1. Bisa bantu jelasin kenapa min?

    BalasHapus
    Balasan
    1. Saya jug atidak tahu, pokoknya hasil yang keluar gitu aja dah, wkwkwkw....

      Hapus
  2. Operator sizeof() atau operator jumlah ukuran pada bahasa C adalah jenis operator yang paling umum digunakan dalam bahasa pemrograman tersebut. Operator ini adalah jenis operator unary yang digunakan untuk menghitung jumlah ukuran atau kapasitas ukuran dari operannya, dimana operator ini akan mengembalikan nilai ukuran dari variabel terhadap nilai operannya.

    BalasHapus
  3. Terima kasih atas informasinya, yang sangat tidak menjelaskan apapun.

    BalasHapus

Hubungi admin melalui Wa : +62-896-2414-6106

Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung.

Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.

- Ikatlah Ilmu dengan Memostingkannya -
- Big things start from small things -