Rust dữ liệu nào chứa một biến đã gán cấu trúc cho nó

Jan 16 2021

Nếu chúng ta có mã sau:

struct Person {
    age: i32
}

fn main() {
    let person =  Person{age : 52};
}

Tôi biết cách sử dụng cấu trúc và tất cả những gì thực sự bên trong biến người?

Nó có phải là một con trỏ đến phần tử đầu tiên của struct không? (Bởi vì tất cả các phần tử nằm kề nhau (?) Nên trình biên dịch sẽ biết vị trí của tất cả các phần tử)

Trả lời

5 Acorn Jan 16 2021 at 21:03

những gì thực sự bên trong biến người?

Điều duy nhất "bên trong" là age, với tổng số 4 byte.

Nó có phải là một con trỏ đến phần tử đầu tiên của struct không?

Không, nó không phải là một con trỏ. Thực tế mà nói, nó chỉ là giá trị, có nghĩa là nó sẽ được lưu trữ trong ngăn xếp của khung / chức năng hiện tại (trình biên dịch có thể xóa nó hoàn toàn khỏi bộ nhớ hoặc thậm chí không sử dụng nó, nếu hành vi quan sát được không thay đổi, nhưng điều đó là một tối ưu hóa: về mặt khái niệm, biến được đặt trong ngăn xếp).

(Bởi vì tất cả các phần tử nằm kề nhau (?) Nên trình biên dịch sẽ biết vị trí của tất cả các phần tử)

Trình biên dịch trong hầu hết các ngôn ngữ biên dịch luôn biết bố cục chính xác của tất cả các loại (trừ trường hợp đặc biệt). Đó là lý do tại sao nhiều tối ưu hóa có thể được thực hiện trước các ngôn ngữ đó. Thông tin này thường bị loại bỏ trong các ngôn ngữ lập trình hệ thống, đó là lý do tại sao chúng thường không hỗ trợ phản chiếu và tại sao việc dịch ngược chúng trở lại thành mã nguồn khá khó khăn.