2009-04-28 31 views

Trả lời

8

Phụ thuộc. Các Non paged bơi nên được dành riêng cho bộ nhớ mà phải ở trong RAM vì vậy nếu bạn đang làm một cái gì đó quan trọng mà sẽ bị ảnh hưởng bởi một trang bộ nhớ từ đĩa hoạt động sau đó sử dụng không paged.

Xem here để biết thêm thông tin.

Nhìn vào this (mặc dù nó thảo luận C++ trái ngược với C) có vẻ như mặc định các hình cầu có thể được đặt bằng #pragma. Ngoài ra, trên p22 của , chúng tôi xem cách thực hiện việc này. Cuối cùng, this discuss ở đây chúng tôi thấy rằng phân đoạn dữ liệu sẽ không thể chia sẻ theo mặc định.

+0

No.my câu hỏi được somthing như nếu tôi khai báo một biến toàn cầu trong trình điều khiển thiết bị, bộ nhớ sẽ được sử dụng, ví dụ paged bộ nhớ hồ bơi hoặc không paged bộ nhớ hồ bơi? (Local biến sẽ sử dụng bộ nhớ nhóm không phân trang). – Navaneeth

+0

nó sẽ không phụ thuộc. nó sẽ là một trong hai trang được phân trang hoặc không được phân trang. – Navaneeth

+2

#pragma data_seg ("TRANG") int foo; #pragma data_seg ("KHÔNG NÊN") int bar; - foo ở đây có thể xem được và thanh không được phân trang. Mặc định là không paged nếu bạn không cho nó một pragma. – SecurityMatt

2

Biến toàn cầu trong trình điều khiển chế độ hạt nhân được cấp phát từ NonPagedPool.

Bạn cũng có thể sử dụng phần mở rộng thiết bị (khi bạn gọi IoCreateDevice), nó luôn được cấp phát từ bộ nhớ NonPaged.

Tôi hy vọng điều này sẽ giúp, Martin

+1

Điều này không đúng. Trình điều khiển hạt nhân trong Windows là các tệp PE có nhiều phần và không giống như các chương trình chế độ người dùng thông thường, trình điều khiển KM thường có * hai phần dữ liệu - một phần được phân trang và một phần không được phân trang (và đôi khi một phần ba bị loại bỏ sau trình điều khiển KM đã khởi tạo). Trong mã của bạn, bạn có thể chọn biến của bạn (hoặc thực sự chức năng) được phân trang hoặc không paged thông qua việc sử dụng các pragmas phân bổ. – SecurityMatt

Các vấn đề liên quan