Trong C hoặc C ++, có bốn kiểu dữ liệu khác nhau, được sử dụng cho dữ liệu kiểu số nguyên. Bốn kiểu dữ liệu này là ngắn, int, dài và dài dài. Mỗi kiểu dữ liệu này chiếm không gian bộ nhớ khác nhau. Kích thước khác nhau trong các kiến trúc khác nhau và các hệ điều hành khác nhau. Đôi khi int chiếm 4 byte hoặc đôi khi mất 2 byte. Điều này cũng xảy ra đối với các trình biên dịch. Vì vậy, chúng tôi có thể sử dụng các trình biên dịch chéo.
Các trình biên dịch chéo về cơ bản là một trình biên dịch, có khả năng biên dịch cho một nền tảng khác với nền tảng hiện tại.
Vì vậy, nếu chúng ta muốn biên dịch mã sau trong hệ thống 32 bit và hệ thống 64 bit, nó sẽ tạo ra các đầu ra khác nhau.
Ví dụ
#include<stdio.h> int main() { printf("Size of int : %ld Bytes\n", sizeof(int)); printf("Size of long : %ld Bytes\n", sizeof(long)); printf("Size of long long : %ld Bytes", sizeof(long long)); }
Đầu ra
Size of int : 4 Bytes Size of long : 4 Bytes Size of long long : 8 Bytes
Vì vậy, từ ví dụ này, chúng ta có thể dễ dàng hiểu rằng kiểu dữ liệu dài khác nhau giữa các trình biên dịch. Vậy lý do đằng sau nó là gì?
CPU gọi dữ liệu từ bộ nhớ chính (RAM) bằng cách cung cấp địa chỉ của thanh ghi địa chỉ bộ nhớ (MAR). Khi vị trí được tìm thấy, nó sẽ được chuyển đến thanh ghi bộ đệm bộ nhớ (MBR). Dữ liệu được lưu trữ vào thanh ghi CPU để sử dụng thêm. Vì vậy, kích thước của bus dữ liệu xác định kích thước của thanh ghi CPU. Đối với hệ thống 32-bit, nó chỉ có thể gọi dữ liệu 4 byte tại một thời điểm. Nếu dữ liệu lớn hơn 32bit, thì sẽ mất hai chu kỳ. Vì vậy, đối với dữ liệu nhỏ hơn, nó không tạo ra bất kỳ sự khác biệt nào.