Có phải 1 Mb cho mỗi luồng không? Hay đó chỉ là chủ đề CLR?Chi phí bộ nhớ cho một chủ đề cửa sổ đơn là gì?
Tôi muốn biết bộ nhớ trên đầu các chuỗi cửa sổ gốc (C++) và chuỗi CLR như xem qua Trình quản lý tác vụ.
Cảm ơn
Có phải 1 Mb cho mỗi luồng không? Hay đó chỉ là chủ đề CLR?Chi phí bộ nhớ cho một chủ đề cửa sổ đơn là gì?
Tôi muốn biết bộ nhớ trên đầu các chuỗi cửa sổ gốc (C++) và chuỗi CLR như xem qua Trình quản lý tác vụ.
Cảm ơn
Chi phí bộ nhớ (trong RAM) sẽ là một trang bộ nhớ. Vì vậy, (tùy thuộc vào nền tảng của bạn) điều này có thể sẽ là 4KB.
Kích thước ngăn xếp mặc định cho cả hai là 1MB. Tuy nhiên đó là bộ nhớ ảo chỉ, do đó, không có chi phí RAM trừ khi nó được sử dụng.
Điều này không đúng đối với mã được quản lý. CLR luôn luôn cam kết trước chuỗi ngăn xếp của các luồng được quản lý, do đó, đối với các chủ đề CLR, ngăn xếp được tính theo giới hạn cam kết. Tất nhiên điều này vẫn không phải là bộ nhớ vật lý cho đến khi nó được xúc động. – Stewart
Đó là những gì tôi đã viết (hoặc muốn). Tôi làm rõ câu trả lời để làm rõ rằng nó đang mô tả chi phí RAM. – Foxfire
Xem blog Mark Russinovich về hạt nhân win32 limits để biết mô tả một luồng lớn và số lượng chi phí được sử dụng.
Tài nguyên .NET sử dụng bao nhiêu tài nguyên có thể khó dự đoán. Tôi đoán, không nhiều hơn nữa.
@Christopher: +1 cho liên kết –
Theo câu trả lời trước, phí cơ bản là 1MB cho mỗi chủ đề. Tôi sẽ không đi vào các sắc thái khác nhau - các câu trả lời khác có chúng được bảo hiểm.
Đối với chủ đề Microsoft Visual C/C++ bạn cũng có phí trên mỗi luồng của bất kỳ không gian làm việc C nào được phân bổ theo yêu cầu (và được lưu trữ bằng cách sử dụng Thread Local Storage TlsAlloc()) để thực hiện công việc như sprintf(), scanf(), strtol() vv Tôi không có bất kỳ con số chính xác - bạn sẽ cần phải quét mã nguồn để CRT của Microsoft để tính toán đó.
Đối với các thời gian chạy C/C++ khác (gcc/g ++/borland/mars kỹ thuật số) có thể có hoặc không có dữ liệu tương tự cho mỗi luồng, chi tiết triển khai của nó.
Không ai trong chúng ta biết nội bộ của .Net Execution Engine, nhưng có lẽ một số dữ liệu trên mỗi luồng được lưu trữ ở đó. Sẽ rất khó để tìm ra những gì mà trên không là mặc dù.
Chỉ có 1MB. Nó nhận được sự ủng hộ vật lý cho đến khi nó được sử dụng. Tại sao bạn nói rằng đó là một ý tưởng tồi để thay đổi nó? Ngăn xếp thường có thể vượt ra ngoài dự trữ ban đầu và nếu 1MB quá mức cần thiết cho một chuỗi đơn giản, thì bạn chỉ cần cắt không gian địa chỉ của mình. –
Tôi không nói đó là một ý tưởng tồi. Tôi đã nói rằng đó là một ý tưởng tồi. Tạo gazillions của chủ đề thường là giải pháp sai cho một vấn đề, do đó, giảm kích thước ngăn xếp chỉ để bạn có thể tạo ra các gazillions của chủ đề là gần như chắc chắn là một sai lầm. Có, có những trường hợp khi chỉnh kích thước ngăn xếp có thể mang lại lợi nhuận, nhưng điều này chỉ nên được thực hiện bởi những người thực sự biết những gì họ đang làm. Ngoài ra, tôi không chắc chắn những gì bạn có nghĩa là, "Ngăn xếp thường có thể phát triển vượt ra ngoài dự trữ ban đầu". AFAIK, không có API để phát triển ngăn xếp. –
@Adrian là quan niệm sai lầm phổ biến. [CLR thực sự ** cam kết ** 1MB RAM cho mỗi luồng cho ngăn xếp.] (Http://www.bluebytesoftware.com/blog/PermaLink,guid,733d7537-f982-4886-af62-66bed0f97ab5.aspx) –