2009-02-10 2 views
9

Trong khi đọc qua bộ đào tạo 70-536, nó khẳng định:NET Optimized Int32

Thời gian chạy tối ưu hóa hiệu suất các loại số nguyên 32-bit (Int32), do đó sử dụng những loại cho quầy và khác các biến số không thể truy cập thường xuyên.

Điều này chỉ áp dụng trong môi trường 32 bit? Int64 có đi qua trong môi trường 64 bit hay Int32 vẫn là lựa chọn tốt hơn?

+0

Câu hỏi thú vị – juan

Trả lời

1

Trừ khi bạn dự định có giá trị vượt quá 2 tỷ, hãy sử dụng giá trị số nguyên. Không có lý do gì để sử dụng thêm không gian cho một lợi ích hiệu suất vượt trội.

Và trái ngược với những gì người khác trong chủ đề này có thể nói, cho đến khi bạn đo lường lợi ích của một điều nhỏ như thế này, nó chỉ là một lợi ích được chia sẻ.

6

Đó là một cách thú vị để đặt nó. Thời gian chạy không có nhiều việc phải làm với nó. CPU được thiết kế để xử lý các số nguyên 32 bit, đó là lý do tại sao chúng là hiệu quả nhất để sử dụng.

Trong môi trường 64 bit, nó lại phụ thuộc vào CPU. Tuy nhiên, trên CPU của x86 ít nhất (theo đó, theo hiểu biết tốt nhất của tôi, là nơi duy nhất .NET chạy), các số nguyên 32 bit vẫn là mặc định. Các thanh ghi chỉ đơn giản được mở rộng để chúng có thể vừa với giá trị 64 bit. Nhưng 32 vẫn là mặc định.

Vì vậy, thích số nguyên 32 bit, ngay cả ở chế độ 64 bit.

Chỉnh sửa: "mặc định" có thể không phải là từ phù hợp. CPU chỉ hỗ trợ một số hướng dẫn, trong đó xác định loại dữ liệu nào nó có thể xử lý và không thể. Không có "mặc định" ở đó. Tuy nhiên, thường có một kích thước dữ liệu mà CPU được thiết kế để xử lý hiệu quả. Và trên x86, ở chế độ 32 và 64 bit, đó là các số nguyên 32 bit. Các giá trị 64 bit thường không đắt hơn, nhưng chúng có nghĩa là các chỉ dẫn dài hơn. Tôi cũng tin rằng ít nhất là 64-bit có khả năng Pentium 4 của chậm hơn đáng kể ở op-64-bit, mặc dù trên CPU gần đây, phần đó không phải là một vấn đề. (Nhưng kích thước lệnh vẫn có thể là)

Giá trị nhỏ hơn 32 bit có phần đáng ngạc nhiên hơn. Có, có ít dữ liệu hơn để truyền tải, điều này là tốt, nhưng CPU vẫn lấy 32 byte tại một thời điểm. Điều đó có nghĩa là nó phải che giấu một phần giá trị, vì vậy chúng trở nên chậm hơn.

+0

Không có loại dữ liệu không thể thiếu "mặc định" từ quan điểm của CPU, "nhập" bị giới hạn bởi mã đăng ký pháp lý. –

+0

đúng. Theo mặc định, tôi có nghĩa là các kích thước dữ liệu mà CPU có thể xử lý hiệu quả nhất. Ít hơn 32 bit có nghĩa là làm việc nhiều hơn trong các hoạt động tải/lưu trữ (vì một phần của đọc/ghi phải được che chắn), và lớn hơn 32 bit yêu cầu hướng dẫn dài hơn (và có thể, trên một số CPU cũng chậm hơn) – jalf

+0

Có bản phân phối .NET cho x64. – Cheeso

1

http://en.wikipedia.org/wiki/64-bit gợi ý (bạn có thể tìm thấy một nguồn có thẩm quyền hơn, đây là một trong những người đầu tiên mà tôi tìm thấy) mà Microsoft "64 bit" dịch vụ sử dụng con trỏ 64-bit với số nguyên 32-bit.

http://www.anandtech.com/guides/viewfaq.aspx?i=112 (và tôi không biết làm thế nào tin tưởng xứng đáng nó là) cho biết,

Để giữ mã sưng lên đến mức tối thiểu, AMD thực sự thiết lập kích thước toán hạng dữ liệu mặc định đến 32-bit trong chế độ địa chỉ 64 bit. Động lực là các toán hạng dữ liệu 64 bit không có khả năng là cần thiết và có thể làm tổn thương hiệu năng; trong những tình huống mà toán hạng dữ liệu 64 bit được mong muốn, chúng có thể được kích hoạt bằng tiền tố REX mới (woohoo, nhưng một tiền tố lệnh x86 khác :)).

+0

Tôi đã thấy điều này cũng –

+0

Trong MSVC, lâu dài là số nguyên 64 bit. –

-2

CPU 32 bit xử lý các số nguyên 32 bit nhanh hơn.Bộ xử lý 64 bit xử lý các số nguyên 64 bit nhanh hơn; chỉ cần suy nghĩ về nó - bạn phải chuyển bit 32 bit tất cả thời gian, hoặc lãng phí 32 bit cho mỗi 32 bit, về cơ bản giống như sử dụng biến 64 bit mà không có lợi thế của biến 64 bit. Một lựa chọn khác sẽ xây dựng thêm mạch vào CPU để chuyển dịch sẽ không cần thiết nhưng rõ ràng là sẽ làm tăng chi phí sản xuất. Điều này cũng tương tự đối với các CPU 32 bit xử lý các biến 16 bit hoặc 8 bit.

Tôi không chắc chắn nhưng tôi sẽ không ngạc nhiên nếu phiên bản 64 bit của .NET Framework được tối ưu hóa hơn một chút để sử dụng thời gian dài - nhưng đó chỉ là suy đoán về phía tôi.

+0

Bạn đang khẳng định rằng các CPU có khả năng xử lý 64 bit xử lý các số nguyên 64 bit nhanh hơn các số nguyên 32 bit: nhưng không phải chỉ là suy đoán về phía bạn? – ChrisW

+0

ChrisW: Bạn không đọc kỹ câu trả lời của tôi. Tôi đã không suy đoán; Tôi giải thích rằng để tránh sự suy giảm hiệu suất do sự lệch hướng, bạn phải pad số nguyên 32 bit của bạn với 32 bit thêm. Đây không phải là suy đoán, đây là một thực tế nổi tiếng. –

2

Scott Hanselman đã đăng một bài viết đề cập đến sự khác biệt giữa mã 32 và 64 bit được quản lý cho blog của mình ngày hôm nay. Để tóm tắt về cơ bản chỉ con trỏ thay đổi kích thước, số nguyên vẫn là 32 bit.

Bạn có thể tìm thấy bài đăng here.