1. Hình dung về bộ nhớ trong lập trình

1.1. Khái niệm memory cell

Gọi là tế bào nhớ. Là khối lưu trữ dữ liệu nhỏ nhất được tạo ra. Một memory cell lưu trữ 1 bit.

Bạn đang xem: Memory cell là gì


*
Sơ đồ mạch của một tế bào nhớ
Một tế bào nhớ bao gồm một transistor và một tụ điện. Transistor cho phép tụ điện tích trữ điện tích (electron). Khi tụ điện tích điện đủ sẽ đại diện cho bit 1 (hiệu điện thế cao – high voltage level), khi tụ điện giải phóng điện tích sẽ đại diện cho bit 0 (hiệu điện thế thấp – low voltage level).
*
Các tế bào nhớ thường sắp xếp theo dạng lưới
Các tế bào nhớ thường được sắp xếp theo dạng lưới. Mỗi hàng gồm có 8 tế bào nhớ, hình thành nên một byte. Người ta quy định đó là smallest addressable unit of memory.
*
Các giá trị nhị phân được lưu trữ trong memory cell
Bộ nhớ có những tế bào nhớ có thể được truy xuất ngẫu nhiên, gọi là Random Access Memory (RAM).

1.2. Khái niệm smallest addressable unit of memory

Tạm dịch là đơn vị nhỏ nhất có thể đánh địa chỉ để quản lý bộ nhớ. Đơn vị này là gồm 8 bit liên tiếp (1 byte). Tạm gọi là ô nhớ (các bạn đừng nhầm lẫn với memory cell, memory cell là tế bào nhớ chứ không phải ô nhớ).Mỗi ô nhớ được đánh địa chỉ để CPU có thể truy xuất vào bộ nhớ. Địa chỉ thường được biểu diễn dưới dạng hệ cơ số 16 (hexadecimal). Ví dụ như0x008888ff,0x001002fe,…(0x là quy ước trong C/C++, chữ số bắt đầu bằng 0x thì hiểu đó là số nguyên được biểu diễn dưới dạng hệ cơ số 16).Các ô nhớ có địa chỉ duy nhất và được đánh số từ 0 trở đi. Số lượng địa chỉ có thể đánh cho ô nhớ phụ thuộc vào độ rộng thanh ghi trong CPU. Ví dụ, CPU 32 bit thì có 2^32 địa chỉ có thể đánh cho các ô nhớ trong RAM.
*
Địa chỉ của các ô nhớ

2. Điều gì xảy ra sau khi khai báo biến?

Khi gặp một lệnh khai báo biến:int a;float f;Chương trình sẽ cấp phát cho biến số ô nhớ liền kề (tạm gọi là vùng nhớ) có kích thước tương ứng với kích thước kiểu dữ liệu của biến.Ví dụ: Khi khai báo một biến a kiểu int 4 bytes, chương trình sẽ tự động cấp phát 1 vùng nhớ 4 bytes (gồm 4 ô nhớ liền kề đang trống và không bị sử dụng bởi chương trình khác). Rồi lưu lại địa chỉ của ô nhớ đầu tiên mà biến nắm giữ và xem đó là địa chỉ của biến a, chẳng hạn là 0x0000fffe. Khi đó, mỗi lần gọi tới biến a thì hệ thống sẽ dùng địa chỉ0x0000fffe để truy xuất dữ liệu lưu trong biến đó.

Xem thêm: Ache Là Gì ? Nghĩa Của Từ Ache Phân Biệt Pain, Hurt Và Ache Trong Tiếng Anh

*
Địa chỉ của biến là địa chỉ ô nhớ đầu tiên của vùng nhớ mà biến nắm giữHệ điều hành sẽ tạo ra một bảng để đối chiếu, ánh xạ giữa tên biến và địa chỉ. Ví dụ:
Tên biếnĐịa chỉ
name0x0000ffef
age0x0f001ffff
x0x01020304
i0x040203ff

3. Chương trình xuất ra đa chca biến

Với ngôn ngữ C/C++, bạn có thể biết địa chỉ của một biến được cấp phát trong bộ nhớ thông qua toán tử&. Bên dưới là chương trình in ra địa chỉ của các biến.#include using namespace std; int main() {int a;float b;cout Kết quả chạy lần 1Address of a: 00F6FDFCAddress of b: 00F6FDF0Kết quả chạy lần 2Address of a: 0098FB80Address of b: 0098FB74Qua 2 lần chạy chương trình thì địa chỉ của các biến khác nhau. Có nghĩa, việc cấp phát vùng nhớ cho biến là hoàn toàn được thực thi tự động bởi hệ điều hành. Ô nhớ nào đang trống tại thời điểm chạy chương trình sẽ được cấp phát cho biến.Các bạn có biết tại sao CPU 32 bit hay hệ điều hành 32 bit chỉ hỗ trợ tối đa 4GB RAM không? Dù có gắn thanh RAM 8GB vào thì cũng chỉ nhận 4GB thôi?Các bạn có thể comment bên dưới để cho mình biết nhé!
Bài trước và bài sau trong môn học>" data-wpel-link="internal">Toán tử số học và toán tử quan hệ trong C++ >>