sách gpt4 ai đã đi

Bộ nhớ được phân bổ qua mmap có thể ghi đè lên phân đoạn dữ liệu không?

In lại Tác giả: IT Prince Thời gian cập nhật: 2023-10-29 01:04:16 27 4
mua khóa gpt4 Nike

trung tâm Chức năng này cũng sử dụngsbrkmmap chức năng. Hiện nay sbrk Chức năng này tăng hoặc giảm một phân đoạn dữ liệu. Vì vậy, nó tăng trưởng theo đường thẳng. Bây giờ câu hỏi của tôi là, tính tuyến tính này có luôn đúng không, hay chẳng hạn,mmap Cuộc gọi có thể phân bổ bộ nhớ chồng lấn lên phân đoạn dữ liệu không?

Tôi đang nói về các chương trình đa luồng chạy trên hệ thống đa lõi. Blog nàyĐã thảo luậnsbrk Được sử dụng cho một số lỗi nghiêm trọng trong các chương trình đa luồng và chỉ ra rằng việc sử dụngsbrk Bộ nhớ được phân bổ có thể khác với bộ nhớ được sử dụngmmap< bộ nhớ được phân bổ được trộn lẫn với nhau(sbrk Đống có thể trở nên không liền kề vì mmaped Các vùng hoặc đối tượng được chia sẻ đang chặn sự phát triển của heap).

1 Câu trả lời

Bài đăng trên blog đó chỉ nói đến cây chứ không nói đến toàn bộ sự việc; trung tâm Các triển khai được phép gọi với các đối số khác không sbrk. Chính xác hơn, nếu mã ứng dụng gọi sbrk, hầu hết Unix trung tâm Việc triển khai sẽ không còn hoạt động bình thường (ý tôi là "chương trình của bạn sẽ bị sập"). Nếu bạn muốn thực hiện phân bổ lớn trực tiếp từ hệ điều hành, bạnphảisử dụng mmap để hoàn thành.

(Thật vậy, trong một chương trình đa luồng,trung tâm Phải ở trong nó sbrk Lệnh gọi __register__ sẽ gói mutex bên trong, nhưng đây là chi tiết triển khai. POSIX nói trung tâm Có tính an toàn cho luồng, điều này rất quan trọng đối với các lập trình viên ứng dụng. )

mmap Sẽ không phân bổchồng chéobrk khu vực, trừ khi bạn sử dụngMAP_ĐÃ_SỬA_ĐỔI. Nếu bạn sử dụng MAP_ĐÃ_SỬA_ĐỔI và chương trình của bạn bị sập, bạn vẫn giữ được tất cả các phần.

Hạt nhân cố gắng tránh thực hiện điều này, nhưng trong hoạt động bình thường mmap Có thể phân bổ gần brk Bộ nhớ ở đầu vùng. Nếu điều này xảy ra, mmap Hậu quả của xung đột khu vực sbrk Gọi sẽthất bại. NóSẽ khôngPhân bổ bộ nhớ không liền kề. trung tâm Một triển khai tốt sẽ phát hiện ra tình huống này và bắt đầu sử dụng mmap. Tôi thực sự chưa thử cách này, nhưng việc viết một chương trình thử nghiệm cũng khá dễ dàng.

Về việc liệu bộ nhớ được phân bổ bởi mmap có thể ghi đè lên phân đoạn dữ liệu hay không, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/9366493/

27 4 0
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com