2009-05-05 36 views
45

Ai đó có thể cho tôi biết dung lượng ngăn xếp trong C#.Dung lượng ngăn xếp trong C#

Tôi đang cố gắng tạo một đối tượng đóng lưới 3D bằng cách sử dụng một mảng 30.000 mục.

+5

Bạn có thể chỉ kiểm tra nó cho mình bằng cách đặt hàng nghìn tỷ mục vào nó và xem khi nào nó bị treo? – Smashery

+0

Một câu hỏi liên quan chặt chẽ là [Kích thước ngăn xếp dưới Mono] (http://stackoverflow.com/questions/19817790/stack-size-under-mono). – Palec

Trả lời

67

Kích thước ngăn xếp mặc định cho ứng dụng .NET là 1 MB (mặc định là 256 KB cho ứng dụng ASP.NET 32 bit và 512 KB cho ứng dụng ASP.NET 64 bit), nhưng bạn có thể thay đổi điều đó. Đối với ứng dụng, bạn có thể thay đổi kích thước mặc định bằng cách sửa đổi tiêu đề PE của tệp thực thi. Đối với các chủ đề bạn tạo, bạn có thể sử dụng quá tải hàm tạo có kích thước ngăn xếp. Tuy nhiên, như Anton Tyjhyy chỉ ra trong câu trả lời của mình, mảng là các kiểu tham chiếu và do đó nằm trên heap (ngay cả khi mảng xảy ra để chứa một loạt các kiểu giá trị).

+3

Kích thước 256 KB cho các ứng dụng ASP.Net dành cho các ứng dụng 32 bit. Trên Windows Server 2008 64 bit trở lên, kích thước ngăn xếp đã được đẩy lên tới 512 KB. Xem KB 932909 để biết thêm chi tiết. – Dono

+0

@Dono Cảm ơn bạn đã thông tin. Tôi sẽ cập nhật. –

+2

@BrianRasmussen Bạn thực sự có thể phân bổ một mảng trên ngăn xếp bằng cách sử dụng 'stackalloc'. Ngoài ra, chỉ vì một cái gì đó là một kiểu tham chiếu không nhất thiết có nghĩa là nó sẽ được cấp phát trên stack hoặc đống, nó thay đổi bằng cách thực hiện CLR và trong thực thi .NET nó thay đổi trong một vài trường hợp đặc biệt (kích thước của kiểu và phạm vi). –

50

Mảng của bạn sẽ tồn tại trên heap, kích thước ngăn xếp không liên quan trong trường hợp của bạn.

+4

Không nếu bạn khai báo nó với stackalloc ... – Nuzzolilo

4

Để sử dụng ngăn xếp để lưu trữ mảng, bạn phải sử dụng mã không an toàn với con trỏ và ngăn xếp để phân bổ không gian bộ nhớ mong muốn trên ngăn xếp.

3

Nếu bạn muốn kiểm tra giá trị cho bản lắp ráp .Net hiện tại của mình thì bạn có thể thực hiện bằng cách sử dụng lệnh ILDASM đi kèm với dấu nhắc lệnh Visual Studio. Một khi bạn đã bắt đầu công cụ, mở lắp ráp của bạn và sau đó đi đến trình đơn View -> Headers. Bây giờ, cuộn xuống phần PE Optional Header (32 bit) trong cửa sổ Headers mới mở. Bạn sẽ thấy hai trường:

  1. Kích thước dự trữ ngăn xếp - Điều này là tự giải thích. Đây là kích thước bộ nhớ ngăn xếp mặc định được phân bổ cho bất kỳ chuỗi nào được tạo trong chương trình/ứng dụng của bạn.
  2. Kích thước của đống cam - cam kết không gian ngăn xếp được - (Trích dẫn Hans passant từ here)

Không gian nói được dành riêng trong paging file của hệ điều hành để chồng luôn có thể được hoán đổi khi cần thiết .

enter image description here

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