2013-08-30 38 views
8

Tôi đã bắt đầu thực hành OpenGL với GlewFreeglut.Freeglut, OpenGL và bộ nhớ

Tôi có câu hỏi về đơn đăng ký của mình và tự hỏi liệu có ai đó gặp phải vấn đề tương tự không (nếu đó là một vấn đề)?

Khi ban đầu tôi thực thi ứng dụng của mình, bộ nhớ được sử dụng là khoảng 22.000 KB. Sau khi thu nhỏ cửa sổ của tôi và tối đa hóa nó một lần nữa, nó chỉ mất 2.900-3.300 KB bộ nhớ và tiếp tục làm như vậy ngay cả sau khi giảm thiểu và tối đa hóa cửa sổ một lần nữa cũng như thực hiện đầu vào chuột và bàn phím trong khi cửa sổ có tiêu điểm.

Tôi tự hỏi tại sao điều này lại như vậy? Tôi không biết nhiều về FreeGlut và tôi tự hỏi nếu có ai khác đã nhận thấy hành vi này khi giảm thiểu/tối đa hóa cửa sổ với FreeGlut. Hoặc có thể đây là một điều OS-specific?

Xin lỗi vì đã không nhắc đến nó trước, nhưng tôi đang sử dụng Windows XP SP3 và tôi đang thiết lập bối cảnh OpenGL với các dòng mã sau đây:

glutInit(&argc, argv); 
glutInitContextVersion(3, 3); 
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); 
glutInitWindowPosition(30, 30); 
glutInitWindowSize(1000, 562); 
glutCreateWindow("Testing"); 

glewExperimental = GL_TRUE; 
glewInit(); 
+0

Bạn đang sử dụng hệ điều hành nào?Làm thế nào để bạn thiết lập bối cảnh GL của mình (tức là bạn chuyển sang FreeGLUT) như thế nào? – thokra

+0

Chắc chắn xây dựng một kịch bản để làm điều đó cho tất cả các ứng dụng GL của tôi! Có thể giảm thiểu tự động (không có ý định chơi chữ) nên trở thành một tính năng phổ biến giữa các hệ điều hành? Nhưng trong tất cả sự trung thực ("đùa một bên", SigTerm) có thể bộ nhớ được phân trang ra và sau đó không cần thiết một lần nữa sau khi khôi phục lại cửa sổ? – jozxyqk

+0

Làm cách nào để đo lường mức sử dụng bộ nhớ và tại sao bạn lo lắng về điều đó? Hệ thống hiện đại được cho là có ít nhất 2GB RAM. Trên máy 8GB của tôi 22000 KB là 0,27% tổng dung lượng bộ nhớ. Bạn có thể đơn giản bỏ qua điều đó. – SigTerm

Trả lời

4

Đây là đánh giá cao hệ điều hành phụ thuộc và cũng phụ thuộc về cách bạn đo mức sử dụng bộ nhớ, nhưng tôi có thể cung cấp cho bạn một chút thông tin chi tiết về lý do tại sao điều này có thể xảy ra trên Microsoft Windows. Microsoft đã có những điều sau đây để nói về việc sử dụng bộ nhớ sử dụng chế độ trong một ứng dụng có sử dụng một trình điều khiển WDDM dựa trên:

trò chơi hiện tại và các ứng dụng đồ họa khác thường xuyên phân bổ bộ nhớ ảo cho một bản sao của tài nguyên bộ nhớ video mà ứng dụng sử dụng. Ứng dụng sử dụng bản sao này để khôi phục hiển thị nhanh nếu nội dung của bộ nhớ video bị mất. Ví dụ, ứng dụng sử dụng bản sao này nếu người dùng nhấn ALT + TAB hoặc nếu người dùng đặt máy tính ở chế độ chờ. Thông thường, thời gian chạy DirectX quản lý bản sao thay mặt cho ứng dụng khi ứng dụng tạo tài nguyên được quản lý. Tuy nhiên, một ứng dụng cũng có thể tự quản lý bản sao. Bộ nhớ ảo mà bản sao sử dụng là tỷ lệ thuận với các tài nguyên bộ nhớ video mà ứng dụng phân bổ.

Hiện tại, Microsoft mô tả vấn đề DirectX này cũng thực sự áp dụng cho OpenGL. Đằng sau hậu trường OpenGL thường đề cập đến các sự kiện "mất thiết bị" hoàn toàn trong suốt (đây không phải là một phần của OpenGL, mà là hệ thống cửa sổ - WGL trong trường hợp này). Mặc dù bạn thực sự có thể nhận các sự kiện này trong phần mềm của bạn trong OpenGL 4.x bằng cách sử dụng một trong các phần mở rộng mạnh mẽ mà bạn thường muốn giả vờ như chúng không tồn tại. Trong mọi trường hợp, tôi nghi ngờ rằng đây là những gì là để đổ lỗi.

Mức tiêu thụ bộ nhớ của bạn sẽ thay đổi tùy theo cách bạn đo mức tiêu thụ bộ nhớ của ứng dụng, cho dù đó chỉ là số lượng trang bộ nhớ ảo được phân bổ (kích thước ảo) hoặc trang thực tế (bộ làm việc/thường trú). Trên Windows, nếu bạn nhìn vào trình quản lý tác vụ ở mức tiêu thụ bộ nhớ thường là thước đo của bộ làm việc. Bộ làm việc là một khái niệm rất mơ hồ và thường đề cập đến số trang được "tham chiếu" gần đây; nó có thể tăng/thu nhỏ tùy thuộc vào thời điểm nó được lấy mẫu bất kể bao nhiêu bộ nhớ thực sự cư trú tại chính xác tức thời đó. Tôi sẽ bôi lên điều này với hành vi lái xe bình thường, và nhận ra rằng bộ nhớ này có lẽ sẽ không ảnh hưởng nghiêm trọng đến bất cứ điều gì.

Nếu bạn đang chạy trên nền tảng 64-bit dành cho máy tính để bàn hiện đại (x86-64), bạn thực sự có không gian địa chỉ phần cứng 48 bit (256 TiB) và hệ điều hành sẽ cung cấp cho bạn một phần nhỏ (8 TiB Windows) cho các quá trình chế độ người dùng cá nhân, do đó, 22.000 KiB là hoàn toàn không đáng kể (nếu bạn thực sự biên dịch phần mềm của bạn là 64-bit).

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