sizeof operator เป็นออปเปอเรเตอร์ที่ใช้มากที่สุดในภาษา C ใช้สำหรับคำนวณขนาดของโครงสร้างข้อมูลหรือชนิดข้อมูลที่ส่งผ่านเข้าไป sizeof คืนค่าเป็น unsigned integer และสามารถนำไปใช้กับ primitive และ compound data types ได้ เราสามารถใช้ sizeof โดยตรงกับชนิดข้อมูลเพื่อรู้ว่าใช้หน่วยความจำเท่าไหร่
ตัวอย่าง
#include <bits/stdc++.h>
using namespace std;
int main() {
cout << sizeof(int) << "\n";
cout << sizeof(char) << "\n";
cout << sizeof(float) << "\n";
cout << sizeof(long) << "\n";
return 0;
}
ผลลัพธ์
4 1 4 8 8
จากฟังก์ชันนี้ เรารู้พื้นที่ที่ตัวแปรชนิดนี้ใช้ ผลลัพธ์ยังขึ้นอยู่กับคอมไพเลอร์ เช่น คอมไพเลอร์ 16-bit จะให้ค่า int ต่างจาก 32-bit
เรายังสามารถนำไปใช้กับนิพจน์ (expression) ได้อีกด้วย
ตัวอย่างกับนิพจน์
#include <bits/stdc++.h>
using namespace std;
int main() {
int x = 4;
cout << sizeof(x++) << "\n";
cout << x << "\n";
return 0;
}
ผลลัพธ์
4 4
เห็นได้ว่า ค่าของ x ก่อนหน้าคือ 4 และแม้หลัง operation แบบ prefix ก็ยังคงเป็น 4 เพราะ sizeof operator ทำงานในขณะ compile-time จึงไม่เปลี่ยนค่าของนิพจน์ที่นำไปใช้
ความจำเป็นของ sizeof Operator
มีการใช้ sizeof หลายอย่าง แต่หลักๆ ใช้เพื่อหาขนาดของ compound data types เช่น array, structure, union ฯลฯ
ตัวอย่างกับ Array
#include <bits/stdc++.h>
using namespace std;
int main() {
int arr[] = {1, 2, 3, 4, 5}; // อาร์เรย์ที่กำหนด
int size = sizeof(arr) / sizeof(int); // คำนวณขนาดอาร์เรย์
cout << size << "\n"; // แสดงขนาดอาร์เรย์
}
ผลลัพธ์
5
ที่นี่ เราคำนวณขนาดทั้งอาร์เรย์ (หน่วยความจำที่ใช้) แล้วหารด้วย sizeof ของชนิดข้อมูล (ในที่นี้คือ int)
การใช้งานสำคัญอีกอย่างคือการจัดสรรหน่วยความจำแบบไดนามิก (Dynamic Memory Allocation) เราใช้ sizeof เมื่อจองพื้นที่
ตัวอย่างการจองหน่วยความจำไดนามิก
#include <bits/stdc++.h>
using namespace std;
int main() {
int* ptr = (int*)malloc(10 * sizeof(int)); // จองหน่วยความจำ 40 bytes
// sizeof(int) คือ 4 และเราจอง 10 บล็อก คือ 40 bytes
}
สรุป
ในบทความนี้ เราอภิบายการใช้ sizeof operator และการทำงานของมัน เราเขียนโค้ดตัวอย่างกรณีต่างๆ เพื่อดูผลลัพธ์และอภิบาย เราใช้ C++ สำหรับการทดลอง สามารถเขียนในภาษาอื่นได้เช่น C, Java, Python หวังว่าจะเป็นประโยชน์