/ / Con trỏ thông minh trong Rust: Chúng hoạt động như thế nào?

Con trỏ thông minh trong Rust: Chúng hoạt động như thế nào?

Quản lý bộ nhớ là một trong những điểm bán hàng của Rust, đặc biệt là vì tính an toàn không bị xâm phạm. Hệ thống sở hữu của Rust cho phép trình biên dịch đảm bảo mã an toàn và không bị lỗi bộ nhớ như con trỏ lơ lửng và rò rỉ bộ nhớ.


Rust cũng cung cấp con trỏ thông minh với siêu dữ liệu bổ sung và các khả năng ngoài con trỏ truyền thống. Con trỏ thông minh rất hữu ích để khắc phục rò rỉ bộ nhớ.


Con trỏ thông minh trong Rust là gì?

Con trỏ thông minh là một trong những kiểu dữ liệu của Rust giúp mở rộng khả năng của con trỏ thông thường bằng cách cung cấp các chức năng bổ sung như toán tử quá tải, hàm hủy và quản lý bộ nhớ tự động.

Rust sử dụng các cấu trúc để thực thi các con trỏ thông minh; do đó, con trỏ thông minh cũng có khả năng sở hữu.

Khi bạn liên kết bộ nhớ chứa dữ liệu được cấp phát động với con trỏ thông minh, chúng sẽ tự động được hủy cấp phát. Con trỏ thông minh cung cấp chức năng kiểm soát thời gian tồn tại của đối tượng Rust, giúp chúng thuận tiện để ngăn ngừa các lỗi như hủy bỏ hội nghị con trỏ null và rò rỉ bộ nhớ phổ biến trong các ngôn ngữ cấp thấp khác như C và C++.

Lợi ích của việc sử dụng con trỏ thông minh

Dưới đây là một số lợi ích của việc sử dụng con trỏ thông minh:

  1. Quản lý bộ nhớ tự động: Con trỏ thông minh cung cấp khả năng quản lý bộ nhớ tự động, bao gồm phân bổ và hủy phân bổ, trái ngược với quản lý bộ nhớ thủ công bằng con trỏ thông thường.
  2. Cải thiện an toàn: Con trỏ thông minh thực thi ngữ nghĩa quyền sở hữu, đảm bảo rằng chỉ một chủ sở hữu có thể truy cập tài nguyên mỗi lần, ngăn chặn dấu vết dữ liệu và các lỗi liên quan đến đồng thời.
  3. Uyển chuyển: Rust cung cấp nhiều con trỏ thông minh, mỗi con trỏ có bộ ngữ nghĩa sở hữu riêng để viết mã an toàn một cách linh hoạt.
  4. Quản lý nguồn tài nguyên: Bạn có thể sử dụng con trỏ thông minh để quản lý các tài nguyên khác như trình xử lý tệp và ổ cắm mạng bằng cách đóng gói tài nguyên trong một con trỏ thông minh giúp quản lý vòng đời của chúng dễ dàng hơn và đảm bảo rằng chúng được đóng và giải phóng đúng cách sau khi sử dụng.
  5. Hiệu suất được cải thiện: Con trỏ thông minh giúp cải thiện hiệu suất bằng cách giảm phân bổ và sao chép bộ nhớ—giảm dung lượng bộ nhớ do sử dụng con trỏ thông minh giúp tăng hiệu suất.

Con trỏ thông minh phù hợp với các ứng dụng có kích thước từ trung bình đến lớn, đặc biệt trong trường hợp quản lý bộ nhớ là rất quan trọng.

Các loại con trỏ thông minh

Rust cung cấp nhiều loại con trỏ thông minh, bao gồm Hộp, Rc, Tế bào giới thiệuMutex.

1. Con trỏ hộp thông minh

Các Hộp Con trỏ thông minh là con trỏ thông minh đơn giản và phổ biến nhất của Rust. Các Hộp con trỏ thông minh giúp phân bổ các giá trị trên heap và tạo một con trỏ được đóng hộp cho khả năng truy cập.

Các Hộp Con trỏ thông minh tiện dụng cho việc cấp phát bộ nhớ động khi bạn cần đảm bảo rằng bộ nhớ sẽ tự động được cấp phát khi con trỏ nằm ngoài phạm vi.

Đây là cách bạn có thể khai báo và sử dụng một Hộp con trỏ:

 fn main(){

    
    let x = Box::new(5);
    println!(x)

}

Các Hộp loại là một phần của khúc dạo đầu của Rust, vì vậy bạn sẽ không phải nhập loại, không giống như các con trỏ thông minh khác.

Các x biến là một Hộp con trỏ trỏ đến giá trị số nguyên 5. Rust phân bổ bộ nhớ cho giá trị trên heap và tự động giải phóng khi biến nằm ngoài phạm vi.

2. Con trỏ thông minh Rc

Các Rc (Reference Counted) con trỏ thông minh cung cấp chức năng tạo giá trị của quyền sở hữu chung. Các Rc con trỏ thông minh theo dõi số lượng tham chiếu đến một giá trị và hủy phân bổ giá trị khi tham chiếu cuối cùng nằm ngoài phạm vi.

Các Rc con trỏ thông minh rất hữu ích khi bạn cần chia sẻ quyền sở hữu một giá trị cho khả năng truy cập trong nhiều phần của chương trình.

Để khai báo một Rc con trỏ thông minh, bạn sẽ nhập Rc struct từ thư viện chuẩn, khai báo một cái mới Rc con trỏ với mới chức năng và sao chép biến con trỏ bằng dòng vô tính Biến đổi.

 use std::rc::Rc;

fn main() {

    
    let x = Rc::new(5);
    let y = Rc::clone(&x);

    println!("x = {}, y = {}", x, y);
}

Các x biến là Rc biến con trỏ và y biến là một bản sao có quyền truy cập vào giá trị trong bộ nhớ. Số lượng tham chiếu là hai và giá trị được hủy cấp phát khỏi bộ nhớ khi các biến nằm ngoài phạm vi.

đầu ra hoạt động của con trỏ thông minh RC

3. Con trỏ thông minh RefCell

Các Tế bào giới thiệu con trỏ thông minh cung cấp khả năng thay đổi bên trong cho phép các tham chiếu không thể thay đổi và có thể thay đổi cùng tồn tại miễn là có một tham chiếu có thể thay đổi trong mỗi thời điểm nhất định.

Các Tế bào giới thiệu con trỏ thông minh rất hữu ích khi thay đổi các giá trị thuộc sở hữu của các tham chiếu có thể thay đổi.

Các Refcell chức năng không phải là một phần của khúc dạo đầu của Rust, vì vậy bạn sẽ cần nhập cấu trúc từ thư viện chuẩn để sử dụng con trỏ thông minh.

 use std::cell::RefCell;

fn main(){

    
    let x = RefCell::new(5);

    let y = x.borrow();
    let z = x.borrow_mut();

    println!("y = {}", *y);
    println!("z = {}", *z);

}

Các Refcell con trỏ thông minh chứa giá trị và y biến là tham chiếu bất biến đến giá trị. Các vay_mut chức năng tạo một tham chiếu có thể thay đổi của giá trị.

Chương trình an toàn nếu mỗi lần chỉ có một tham chiếu có thể thay đổi.

4. Con trỏ thông minh Mutex

Các Mutex con trỏ thông minh cung cấp loại trừ lẫn nhau. Các Mutex con trỏ thông minh tiện dụng để đồng bộ hóa quyền truy cập vào các giá trị trên nhiều luồng trong các chương trình đồng thời.

Các Mutex con trỏ thông minh cung cấp loại trừ lẫn nhau để đảm bảo rằng chỉ một luồng có thể truy cập giá trị trong khi ngăn chặn dấu vết dữ liệu.

Bạn sẽ cần nhập khẩu Mutex struct và tạo một phiên bản mới với mới chức năng sử dụng Mutex Con trỏ thông minh trong Rust.

 use std::sync::Mutex;

fn main() {

    
    let counter = Mutex::new(0);

    {
        let mut num = counter.lock().unwrap();
        *num += 1;
    }

    println!("Result: {}", *counter.lock().unwrap());
}

Các quầy tính tiền biến là cái mới Mutex ví dụ. Các chủ yếu chức năng có được một khóa trên mutex với khóa phương pháp của Mutex ví dụ. Khóa cho phép sửa đổi an toàn giá trị của bộ đếm trước khi nhả khóa và in giá trị.

Các Mutex type đảm bảo rằng chỉ một luồng có thể truy cập tài nguyên được chia sẻ (trong trường hợp này, quầy tính tiền biến) và sửa đổi giá trị của nó tại một thời điểm. Loại trừ lẫn nhau đảm bảo quyền truy cập đồng thời vào tài nguyên được chia sẻ được tuần tự hóa để ngăn dấu vết dữ liệu và các vấn đề tương tranh khác.

đầu ra hoạt động của con trỏ thông minh mutex

Mô hình sở hữu của Rust đảm bảo an toàn cho bộ nhớ

Con trỏ thông minh là một trong những cách tiếp cận của Rust đối với tính linh hoạt và an toàn của bộ nhớ. Mô hình sở hữu của Rust đảm bảo rằng các chương trình sử dụng bộ nhớ một cách an toàn với trình kiểm tra mượn tại thời điểm biên dịch.

Trình kiểm tra mượn là một tính năng quan trọng trong mô hình sở hữu của Rust, thực thi các quy tắc nghiêm ngặt đối với khả năng truy cập và sửa đổi bộ nhớ.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *