2010-04-30 4 views

Trả lời

6

Giá trị mặc định là 1 MB cho cả nativeCLR đề. Bạn có thể thay đổi nó, mặc dù đó thường là một ý tưởng tồi.

+1

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. –

+0

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. –

+0

@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) –

1

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.

+0

Đ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

+2

Đó 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

3

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.

+0

@Christopher: +1 cho liên kết –

1

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ù.