1. Bộ nhớ được tổ chức như thế nào

Mỗi máy tính có bộ nhớ trong . Nó là gì? Nó có những tính chất gì? Và, quan trọng nhất, nó mang lại lợi ích như thế nào cho chúng ta?

Mọi chương trình (kể cả chương trình viết bằng Java) đều được tải vào bộ nhớ chính trước khi được thực thi. Bộ nhớ chính chứa mã chương trình (được thực thi bởi bộ xử lý) cũng như dữ liệu chương trình (tức là dữ liệu mà chính chương trình đưa vào bộ nhớ).

Bộ nhớ là gì và nó như thế nào?

Một bảng tính Exсel bao gồm các ô . Mỗi ô có mã định danh duy nhất của riêng nó ( A1, A2, ... B1, B2). Nếu bạn biết mã định danh của một ô , thì bạn luôn có thể ghi một số giá trị vào đó hoặc lấy bất kỳ giá trị nào được lưu trữ ở đó. Bộ nhớ máy tính được tổ chức theo một cách rất giống nhau.

Chương trình và dữ liệu chương trình được lưu trữ trong bộ nhớ khi chương trình đang chạy. Tất cả bộ nhớ máy tính bao gồm các ô nhỏ gọi là byte . Mỗi ô có một mã định danh hoặc số duy nhất được liên kết với nó: 0, 1, 2, 3, ...; (việc đánh số bắt đầu từ số không). Nếu chúng ta biết số của một ô , chúng ta có thể lưu dữ liệu trong đó. Hoặc lấy dữ liệu từ nó. Một số ô chứa mã của chương trình, tức là tập lệnh cho bộ xử lý. Những người khác lưu trữ dữ liệu được sử dụng bởi chương trình. Số của ô còn được gọi là địa chỉ ô .

Bộ xử lý biết cách thực hiện các lệnh đã được nạp vào bộ nhớ. Hầu như tất cả các lệnh của bộ xử lý đều giống như lấy dữ liệu từ một số ô , làm điều gì đó với chúng , sau đó gửi kết quả đến các ô khác .

Chúng tôi kết hợp hàng trăm lệnh đơn giản để có được các lệnh phức tạp và hữu ích.

Khi một biến được khai báo trong mã, một đoạn bộ nhớ chưa được sử dụng sẽ được phân bổ cho biến đó. Đây thường là một vài byte. Khai báo một biến yêu cầu bạn chỉ ra loại thông tin mà chương trình sẽ lưu trữ trong đó: số, văn bản hoặc dữ liệu khác. Rốt cuộc, nếu bạn không biết loại thông tin sẽ được lưu trữ, thì sẽ không rõ khối lượng bộ nhớ cần được phân bổ cho biến đó lớn đến mức nào.

Vào buổi bình minh của thời đại máy tính, các chương trình làm việc trực tiếp với các địa chỉ bộ nhớ, nhưng sau đó, để thuận tiện cho các lập trình viên, các ô bắt đầu được đặt tên. Trên hết, một tên biến duy nhất là để thuận tiện cho người lập trình, vì chương trình xử lý tốt các địa chỉ bộ nhớ đơn giản.


2. Biến trong bộ nhớ

Tổng cộng, Java có 4 kiểu dữ liệu để lưu trữ số nguyên. Đây là byte, short, intlong.

Kiểu Kích thước tính bằng byte Nguồn gốc của tên loại
byte 1 byte là cách viết lại bit có chủ ý để tránh nhầm lẫn với bit
short 2 Viết tắt của Số nguyên ngắn
int 4 Viết tắt của số nguyên
long 8 Viết tắt của số nguyên dài

Ngoài ra, Java có 2 kiểu cho số thực: float và double:

Kiểu Kích thước tính bằng byte Nguồn gốc của tên loại
float 4 Viết tắt của Số dấu phẩy động
double 8 Viết tắt của Double Float

Mỗi lần thực thi chương trình đạt đến một lệnh để tạo một biến, một khối bộ nhớ nhỏ được phân bổ cho nó (kích thước phụ thuộc vào loại biến).

Địa chỉ của một biến là địa chỉ của ô đầu tiên của khối bộ nhớ được cấp phát.

Các chương trình Java không được phép truy cập trực tiếp vào bộ nhớ. Mọi thao tác với bộ nhớ chỉ diễn ra thông qua máy ảo Java.


3. StringLoại trong bộ nhớ

Loại Stringcó thể lưu trữ một lượng lớn dữ liệu, điều này ngụ ý rằng nó không chỉ là một loại dữ liệu mà còn là một lớp chính thức.

Đối Stringtượng được đặt trong một khối bộ nhớ được phân bổ lưu trữ địa chỉ của một khối bộ nhớ khác trong đó văn bản được lưu trữ.

Biến int achiếm 4byte và lưu trữ giá trị 1.

Biến int bchiếm 4byte và lưu trữ giá trị 10,555. Chúng tôi sử dụng dấu phẩy làm dấu tách hàng nghìn. Và chúng tôi sử dụng dấu chấm làm dấu tách thập phân.

Biến double dchiếm 8byte và lưu trữ giá trị 13.001.

Biến String strchiếm 4byte và lưu trữ giá trị G13, là địa chỉ của ô đầu tiên của khối bộ nhớ chứa văn bản.

Một văn bản của String objectđược lưu trữ trong một khối bộ nhớ riêng biệt. Địa chỉ của ô đầu tiên của nó được lưu trữ trong strbiến.


4. Tại sao đánh số bắt đầu bằng số 0 trong lập trình

Mọi người thường thắc mắc tại sao các lập trình viên hầu như luôn bắt đầu đếm từ số không. Chà, thực tế là có nhiều tình huống thuận tiện hơn khi đếm từ 0 (tất nhiên, cũng có những tình huống thuận tiện hơn khi đếm từ 1).

Ví dụ đơn giản nhất là đánh địa chỉ bộ nhớ. Nếu biến của bạn đã được phân bổ 4byte bộ nhớ và bạn biết đó Xlà địa chỉ của byte đầu tiên, thì địa chỉ của mỗi byte là gì? , , , . Đơn giản như vậy, chúng ta có một nhóm byte có thể được truy cập bằng các chỉ số , , , .X+0X+1X+2X+30123

Khi chúng ta nghĩ về một địa chỉ tương đối trong một khối dữ liệu, lập chỉ mục từ 0 là điều hợp lý. Đây là lý do chính để đếm từ số không .