×

Trả về kích thước của kiểu dữ liệu hoặc biến với sizeof trong C++

Trong lập trình C++, sizeof là một toán tử rất quan trọng được sử dụng để trả về kích thước của một kiểu dữ liệu hoặc một biến. Kích thước này được tính bằng số byte mà biến hoặc kiểu dữ liệu chiếm dụng trong bộ nhớ.

Sử dụng sizeof với các kiểu dữ liệu cơ bản

Các kiểu dữ liệu cơ bản như int, float, double, char đều có kích thước khác nhau tùy thuộc vào kiến trúc của hệ thống (32-bit hay 64-bit). Dưới đây là cách sử dụng sizeof với các kiểu dữ liệu này:

#include <iostream>
using namespace std;

int main() {
    cout << "Kích thước của int: " << sizeof(int) << " byte" << endl;
    cout << "Kích thước của float: " << sizeof(float) << " byte" << endl;
    cout << "Kích thước của double: " << sizeof(double) << " byte" << endl;
    cout << "Kích thước của char: " << sizeof(char) << " byte" << endl;
    return 0;
}

Kết quả có thể giống như sau (tùy thuộc vào hệ thống):

Kích thước của int: 4 byte
Kích thước của float: 4 byte
Kích thước của double: 8 byte
Kích thước của char: 1 byte

Sử dụng sizeof với biến

Khi bạn muốn biết kích thước của một biến cụ thể, bạn cũng có thể sử dụng toán tử sizeof theo cách tương tự. Dưới đây là ví dụ:

#include <iostream>
using namespace std;

int main() {
    int a;
    float b;
    double c;
    char d;

    cout << "Kích thước của biến a: " << sizeof(a) << " byte" << endl;
    cout << "Kích thước của biến b: " << sizeof(b) << " byte" << endl;
    cout << "Kích thước của biến c: " << sizeof(c) << " byte" << endl;
    cout << "Kích thước của biến d: " << sizeof(d) << " byte" << endl;

    return 0;
}

Sử dụng sizeof với cấu trúc (struct) và mảng

Ngoài các kiểu dữ liệu cơ bản và biến đơn lẻ, sizeof còn rất hữu ích khi tính toán kích thước của các cấu trúc dữ liệu phức tạp hơn như struct và mảng.

Với struct

#include <iostream>
using namespace std;

struct MyStruct {
    int a;
    float b;
    double c;
    char d;
};

int main() {
    cout << "Kích thước của struct MyStruct: " << sizeof(MyStruct) << " byte" << endl;
    return 0;
}

Với mảng

#include <iostream>
using namespace std;

int main() {
    int array[10];
    cout << "Kích thước của mảng array: " << sizeof(array) << " byte" << endl;

    int length = sizeof(array) / sizeof(array[0]);
    cout << "Số phần tử của mảng array là: " << length << endl;

    return 0;
}

Lưu ý quan trọng

  • Alignment (Căn chỉnh): Một số hệ thống có thể bố trí thêm byte để căn chỉnh dữ liệu, dẫn đến việc kích thước trả về bởi sizeof có thể lớn hơn kích thước tổng cộng của các thành phần.
  • Đa hình (Polymorphism): Nếu sử dụng sizeof trên một đối tượng của lớp có tính đa hình, kết quả có thể không như mong đợi do bảng con trỏ ảo (vtable).

Kết luận

Toán tử sizeof là một công cụ mạnh mẽ để nắm bắt và quản lý bộ nhớ trong lập trình C++. Sử dụng đúng cách, bạn có thể tối ưu hóa mã nguồn và tránh các lỗi liên quan đến quản lý bộ nhớ.

Comments