Fakta tentang Sizeof pada Bahasa C
// 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;
}
// 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;
}
- 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 array. Untuk 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.
- 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.
Kesimpulan
- Fakta dan Penjelasan Makro Multibaris pada Bahasa C
- Fakta dan Penjelasan Makro Offset pada Bahasa C
- Penjelasan Singkat, Makro Prediksi Cabang pada GCC
- 2 Perbedaan Utama #define dan const pada Bahasa C
- Perbedaan stdio.h dan stdlib.h pada Bahasa C
- Cara Sederhana Mencetak Nama Variabel pada Bahasa C
- 2 Cara Sederhana Pendefinisian Konstanta pada Bahasa C dan C++
5 komentar untuk "Fakta tentang Sizeof pada Bahasa C"
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 -
Bisa bantu jelasin kenapa min?
BalasHapusSaya jug atidak tahu, pokoknya hasil yang keluar gitu aja dah, wkwkwkw....
HapusOperator 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.
BalasHapusTerima kasih atas informasinya, yang sangat tidak menjelaskan apapun.
BalasHapussama-sama, hahaha
Hapus