2009-01-31 4 views

Trả lời

16

Đối với native ứng dụng, bạn sẽ nhận được các lợi ích như tăng không gian địa chỉ và không có điều gì. Tuy nhiên, các ứng dụng .NET chạy trên CLR, nó trừu tượng hóa mọi khác biệt về kiến ​​trúc cơ bản.

Giả sử bạn chỉ xử lý mã được quản lý, không có bất kỳ lợi ích nào để nhắm mục tiêu nền tảng cụ thể; bạn tốt hơn chỉ cần biên dịch với bộ cờ "anycpu" (được bật theo mặc định). Điều này sẽ tạo ra các hội đồng bất khả tri nền tảng sẽ chạy tốt như nhau trên bất kỳ kiến ​​trúc nào mà CLR chạy trên đó.

Nhắm mục tiêu cụ thể (nói) x64 sẽ không cung cấp cho bạn bất kỳ tăng hiệu suất nào và sẽ ngăn các hội đồng của bạn hoạt động trên nền tảng 32 bit.

This article có thêm thông tin về chủ đề này.

Cập nhật: Scott Hanselman vừa đăng một bài tốt overview của chủ đề này.

4

Về lý thuyết, một chương trình được biên dịch cho x64 sẽ chạy nhanh hơn chương trình được biên dịch cho x86. Lý do là vì có nhiều thanh ghi đa năng hơn trong kiến ​​trúc x64. 32-bit x86 chỉ có 4 thanh ghi mục đích chung. AMD bổ sung thêm 8 thanh ghi mục đích chung trong các phần mở rộng x64 của chúng. Điều này cho phép tải ít bộ nhớ hơn và (hơi) hiệu suất nhanh hơn.

Trong thực tế, điều này không tạo nên sự khác biệt lớn về hiệu suất, nhưng nó sẽ tạo ra sự khác biệt nhỏ.

Kích thước của bộ nhớ nhị phân và bộ nhớ sẽ tăng phần nào từ việc sử dụng hướng dẫn 64 bit nhưng vì x64 vẫn là cấu trúc CISC, kích thước nhị phân không gấp đôi như trong kiến ​​trúc RISC. Hầu hết các hướng dẫn vẫn ngắn hơn 64 bit.

+0

Cảm ơn bạn đã giải thích! – Jason

0

Tôi thực sự không phải là một chuyên gia về kiến ​​trúc CPU, vì vậy hãy xem xét ý kiến ​​của tôi một cách nhẹ nhàng. Wikipedia có một bài viết mô tả kiến ​​trúc x86-64 (link text).

Máy x86-64 có nhiều thanh ghi hơn, điều này một mình sẽ giúp làm cho chương trình nhanh hơn. Kiến trúc mới này cũng cung cấp các bộ lệnh mới có thể cải thiện tốc độ nếu trình biên dịch tận dụng lợi thế của nó.

Một yếu tố khác cần tính đến là số lượng bộ lệnh có sẵn. Khi một chương trình được biên dịch thành x86 thường thì mục tiêu của nó là chạy vào tất cả CPUS 32 bit hiện có (Pentium 1, 2, 3, 4, core * etc). Mỗi thế hệ CPU mới thêm bộ hướng dẫn mới, hướng dẫn này không thể được sử dụng bởi một chương trình muốn hoàn toàn di động ở định dạng nhị phân trong tất cả các CP x86. Khi x86-64 bit là một kiến ​​trúc mới, việc biên dịch lại một chương trình cho máy này cung cấp cho trình biên dịch một bộ hướng dẫn rộng hơn để sử dụng mà không lo lắng quá nhiều về khả năng tương thích nhị phân giữa CPUS 64 bit khác.

2

Tôi nghi ngờ điều đó (với nền tảng C# /. NET), trừ khi bạn đang sử dụng Mã gốc. Hãy nhớ rằng, NET quản lý mã được biên dịch để IL, và giá trị mặc định nền tảng chuyển sang anycpu, vì vậy bạn nên có được hiệu suất tốt hơn trên hệ điều hành 64-bit với nhị phân hiện tại của bạn:

http://blogs.msdn.com/gauravseth/archive/2006/03/07/545104.aspx

Bài viết này có một tấn thông tin hữu ích bao gồm cả công cụ CorFlags sẽ cho phép bạn kiểm tra một tiêu đề PE.

Nói chung, đối với các tệp nhị phân mã gốc, có.

3

Vì vấn đề thực tế, các ứng dụng 64Bit không yêu cầu dung lượng bộ nhớ lớn có xu hướng hoạt động chậm hơn. Một trong những lý do đằng sau nó là bạn phải di chuyển dữ liệu xung quanh. Nếu bạn không thể sử dụng> không gian bộ nhớ 2GB (cho bộ nhớ đệm ví dụ), tôi sẽ không khuyên bạn nên nó.

Đây là một liên kết thú vị Tôi vừa tìm thấy http://www.osnews.com/story/5768 với nhiều thông tin.