Hệ thống 32 bit so với 64 bit


224

Sự khác biệt giữa các hệ thống 32 bit và 64 bit là gì?

Nếu bạn đã sử dụng cả hai, bạn đã trải nghiệm loại khác biệt sắc nét nào?

Nó có phải là một vấn đề khi sử dụng các chương trình 32 bit trên các hệ thống 64 bit trong một số trường hợp không?


Có nhiều sự nhầm lẫn ở đây và ở nơi khác trên web, giữa việc đánh địa chỉ vật lý (truy cập ram) PEA ảnh hưởng đến điều này, bo mạch chủ ảnh hưởng đến điều này và địa chỉ logic (bộ nhớ ảo trên mỗi quy trình). Trên hệ điều hành 32 bit, bộ nhớ ảo bị giới hạn ở mức 4GB trừ đi phần nhân dự trữ. Nó độc lập với RAM, bạn có thể có RAM 0,1 MB hoặc 8GB và bạn sẽ có chính xác 4GB bộ nhớ ảo (nhưng một số được dành riêng bởi kernel). PEA có thể được sử dụng để có nhiều RAM hơn, nhưng không phải là một câu trả lời hoàn hảo vì hạt nhân KHÔNG THỂ truy cập tất cả.
ctrl-alt-delor

Câu trả lời:


264

Lưu ý: Những câu trả lời này áp dụng cho CPU PC dựa trên x86 tiêu chuẩn (Intel và AMD) và Windows (như được định cấu hình thông thường cho người dùng cuối). Các chip 32 bit hoặc 64 bit khác, các HĐH khác và các cấu hình HĐH khác có thể có sự đánh đổi khác nhau.

Từ góc độ kỹ thuật, HĐH 64 bit mang đến cho bạn:

  • Cho phép các tiến trình riêng lẻ xử lý hơn 4 GB RAM mỗi lần (trong thực tế, hầu hết nhưng không phải tất cả các HĐH 32 bit cũng giới hạn tổng RAM hệ thống có thể sử dụng ở mức dưới 4 GB, không chỉ tối đa cho mỗi ứng dụng).

  • Tất cả các con trỏ mất 8 byte thay vì 4 byte. Hiệu quả đối với việc sử dụng RAM là tối thiểu (vì bạn không có khả năng có một ứng dụng chứa đầy gigabyte con trỏ), nhưng trong trường hợp lý thuyết tồi tệ nhất, điều này có thể khiến bộ đệm CPU có thể chứa 1/2 số con trỏ (tạo ra nó có hiệu quả bằng 1/2 kích thước). Đối với hầu hết các ứng dụng, đây không phải là một vấn đề lớn.

  • Có nhiều thanh ghi CPU đa năng hơn ở chế độ 64 bit. Các thanh ghi là bộ nhớ nhanh nhất trong toàn bộ hệ thống của bạn. Chỉ có 8 ở chế độ 32 bit và 16 thanh ghi mục đích chung ở chế độ 64 bit. Trong các ứng dụng máy tính khoa học tôi đã viết, tôi đã thấy tăng hiệu suất lên tới 30% bằng cách biên dịch lại ở chế độ 64 bit (ứng dụng của tôi thực sự có thể sử dụng các thanh ghi bổ sung).

  • Hầu hết các hệ điều hành 32 bit thực sự chỉ cho phép các ứng dụng riêng lẻ sử dụng 2 GB RAM, ngay cả khi bạn đã cài đặt 4 GB. Điều này là do 2 GB không gian địa chỉ khác được dành riêng để chia sẻ dữ liệu giữa các ứng dụng, với HĐH và để liên lạc với trình điều khiển. Windows và Linux sẽ cho phép bạn điều chỉnh sự đánh đổi này thành 3 GB cho các ứng dụng và 1 GB được chia sẻ, nhưng điều này có thể gây ra sự cố cho một số ứng dụng không mong đợi sự thay đổi. Tôi cũng đoán nó có thể làm tê liệt một card đồ họa có RAM 1 GB (nhưng tôi không chắc). HĐH 64 bit có thể cung cấp cho các ứng dụng 32 bit riêng lẻ gần hơn với 4 GB đầy đủ để chơi.

Từ quan điểm của người dùng:

  • Tốc độ ứng dụng thường nhanh hơn đối với ứng dụng 64 bit trong HĐH 64 bit so với phiên bản ứng dụng 32 bit trên HĐH 32 bit, nhưng hầu hết người dùng sẽ không thấy tốc độ này. Hầu hết các ứng dụng cho người dùng bình thường không thực sự tận dụng các thanh ghi bổ sung hoặc lợi ích được cân bằng bởi các con trỏ lớn hơn lấp đầy bộ đệm.

  • Nếu bạn có bất kỳ ứng dụng hog bộ nhớ nào (như trình chỉnh sửa ảnh, xử lý video, tính toán khoa học, v.v.), nếu bạn có (hoặc có thể mua) hơn 3 GB RAM và bạn có thể có phiên bản ứng dụng 64 bit, sự lựa chọn rất dễ dàng: sử dụng HĐH 64 bit.

  • Một số phần cứng không có trình điều khiển 64 bit. Kiểm tra bo mạch chủ của bạn, tất cả các thẻ cắm và tất cả các thiết bị USB trước khi thực hiện chuyển đổi. Lưu ý rằng trong những ngày đầu của Windows Vista, có rất nhiều vấn đề với trình điều khiển. Những ngày này mọi thứ nói chung là tốt hơn.

  • Nếu bạn chạy quá nhiều ứng dụng cùng lúc mà bạn hết RAM (thông thường bạn có thể nói điều này vì máy tính của bạn bắt đầu hoạt động rất chậm và bạn nghe thấy tiếng ổ cứng bị vỡ), thì bạn sẽ muốn có HĐH 64 bit (và đủ RAM).

  • Bạn có thể chạy các ứng dụng 32 bit (nhưng không phải trình điều khiển) trong Windows 64 bit mà không gặp vấn đề gì. Sự chậm chạp tồi tệ nhất mà tôi đã đo được cho một ứng dụng 32 bit trong Windows 64 bit là khoảng 5% (có nghĩa là nếu mất 60 giây để làm điều gì đó trong Windows 32 bit, thì mất tối đa 60 * 1.05 = 65 giây với cùng một ứng dụng 32 bit trong Windows 64 bit).

Những gì 32 bit so với 64 bit không ngụ ý:

Trên các hệ thống x86, 32 bit so với 64 bit liên quan trực tiếp đến kích thước của các con trỏ. Đó là tất cả.

  • Nó không đề cập đến kích thước của intloại C. Điều đó được quyết định bởi việc triển khai trình biên dịch cụ thể và hầu hết các trình biên dịch phổ biến chọn 32 bit inttrên các hệ thống 64 bit.

  • Nó không trực tiếp đề cập đến kích thước của các thanh ghi không con trỏ bình thường. Tuy nhiên, việc sử dụng các thanh ghi số học 64 bit xảy ra để yêu cầu ứng dụng và HĐH cũng chạy ở chế độ con trỏ 64 bit.

  • Nó không trực tiếp đề cập đến kích thước của bus địa chỉ vật lý. Ví dụ: một hệ thống có các dòng bộ đệm rộng 64 bit và bộ nhớ tối đa 512GiB chỉ cần 33 bit trong bus địa chỉ của nó (tức là log2(512*1024**3) - log2(64) = 33).

  • Nó không đề cập đến kích thước của bus dữ liệu vật lý: liên quan nhiều hơn đến chi phí sản xuất (số lượng chân trong ổ cắm CPU) và kích thước dòng bộ đệm.


8
Câu trả lời rất hay. Đặc biệt bởi vì bạn lưu ý rằng thực tế không có giới hạn RAM 4gb, nhưng xử lý giới hạn sử dụng bộ nhớ. Chỉ cần thông tin của bạn, tôi nghĩ bạn nên xem liên kết này: unawave.de/windows-7-tipps/32-bit-ram-barrier.html?lang=EN
Đột phá

8
Chúng là những ứng dụng không hoạt động trên windows 64 bit: ứng dụng 16 bit / những ứng dụng sử dụng trình điều khiển chế độ kernel 32 bit hoặc không dấu. Đó là rất nhiều cho một người nghiện phần mềm như tôi ...
fluxtendu

1
@flextendu, với các yêu cầu về hiệu suất của các chương trình cũ đó, bạn gần như chắc chắn có thể chạy chúng trong một máy ảo. Với trình phát VMware, Virtual PC và Virtual Box ngoài kia, không có lý do gì để không dùng thử một trong số chúng, nếu bạn có giấy phép Windows 32 bit. Nếu bạn không muốn gây rối với điều đó, có lẽ chúng cũng sẽ hoạt động trong "Chế độ Windows XP".
Đánh dấu gian hàng

6
Các ứng dụng BTW, 32 bit sẽ không sử dụng nhiều hơn 2 GiB RAM trừ khi một cờ cụ thể được bật trong bảng kê khai của chúng. Nguồn: blog.technet.com/b/markrussinovich/archive/2008/11/17/17
Hello71

Có, tôi chắc chắn Hello71 đã đánh vào một thứ khá quan trọng không được đề cập ở đây: Hầu hết các ứng dụng 32 bit sẽ không bao giờ trực tiếp tận dụng RAM phụ. Tôi nghĩ rằng điều này là đáng nói, không?
Django Reinhardt

107

Về cơ bản, bạn có thể làm mọi thứ với quy mô lớn hơn:

  1. RAM trên mỗi hệ điều hành: giới hạn RAM là 4GB trên x86 cho hệ điều hành (hầu hết thời gian)
  2. RAM trên mỗi tiến trình: giới hạn RAM là 4GB trên x86 cho các tiến trình (luôn luôn). Nếu bạn nghĩ rằng điều này không quan trọng, hãy thử chạy một ứng dụng chuyên sâu về cơ sở dữ liệu MSSQL. Nó sẽ sử dụng> 4GB nếu bạn có sẵn và chạy tốt hơn nhiều.
  3. Địa chỉ: Địa chỉ là 64 bit thay vì 32 bit cho phép bạn có các chương trình "lớn hơn" sử dụng nhiều bộ nhớ hơn.
  4. Xử lý có sẵn cho các chương trình: Bạn có thể tạo thêm xử lý tệp, quy trình, ... Ví dụ trên Windows x64, bạn có thể tạo> 2000 luồng trên mỗi quy trình, nhưng trên x86 gần hơn vài trăm.
  5. Các chương trình rộng hơn có sẵn: Từ một x64, bạn có thể chạy cả hai chương trình x86 và x64. (Ví dụ về windows: wow64, windows32 trên Windows64 giả lập)
  6. Tùy chọn mô phỏng: Từ x64, bạn có thể chạy cả máy ảo x86 và x64.
  7. Nhanh hơn: Một số tính toán nhanh hơn trên CPU 64 bit
  8. Phân chia nhiều tài nguyên hệ thống: Rất nhiều bộ nhớ RAM rất quan trọng khi bạn muốn chạy ít nhất một VM để phân chia tài nguyên hệ thống của bạn.
  9. Các chương trình độc quyền có sẵn: Một số chương trình mới chỉ hỗ trợ x64. Trao đổi ví dụ 2007.
  10. X86 lỗi thời trong tương lai?: Theo thời gian, ngày càng nhiều 64 bit sẽ được sử dụng và càng nhiều x86 sẽ không được sử dụng. Vì vậy, các nhà cung cấp sẽ chỉ hỗ trợ 64-bit nhiều hơn nữa.

Hai loại kiến ​​trúc 64 bit lớn là kiến ​​trúc x64 và IA64. Nhưng x64 là phổ biến nhất cho đến nay.

x64 có thể chạy các lệnh x86 cũng như các lệnh x64. IA64 cũng chạy các lệnh x86, nhưng nó không thực hiện các phần mở rộng SSE. Có phần cứng dành riêng cho Itanium để chạy các hướng dẫn x86; nó là một trình giả lập, nhưng trong phần cứng.

Như @Phil đã đề cập, bạn có thể có cái nhìn sâu hơn về cách thức hoạt động ở đây .


1
Ừm. IA64 chạy các lệnh x86. Nó không làm phần mở rộng SSE, mặc dù. Có phần cứng dành riêng cho Itanium để chạy các hướng dẫn x86; nó là một trình giả lập, nhưng trong phần cứng.
tzot

2
Một vài năm trước, Raymond Chen đã đăng bài về "giới hạn" năm 2000, và nó ít nhiều là một huyền thoại đô thị: blog.msdn.com/oldnewthing/archive/2005/07/29/444912.aspx
bk1e

Upvote cho Arstechnica cho lời giải thích của họ.
Avihu Turzion

2
Giới hạn RAM là 4GB không hoàn toàn đúng (đúng hơn là giới hạn nhân tạo dành cho người dùng gia đình hệ thống Windows), hãy kiểm tra PAE . Với hầu hết các phần cứng cập nhật, hạt nhân Linux PAE (vốn được sử dụng theo mặc định cho 32 bit) có thể xử lý nhiều hơn 4GB. Áp dụng tương tự cho FreeBSD và NetBSD.
Izzy

Hệ thống 32 bit không thể sử dụng nhiều hơn 4GB (dấu chấm thứ 1) vì "địa chỉ" đó (dấu chấm thứ 3). Bởi vì số lượng 32 bit cao nhất là 4.294.967.296 (= 4GB). Vì vậy, số 1 và số 3 của bạn là CÙNG. Bạn có thể loại bỏ dấu câu thứ 3. :)
Máy bay phản lực

46

Tác động lớn nhất mà mọi người sẽ nhận thấy vào lúc này là một PC 32 bit chỉ có thể giải quyết tối đa 4GB bộ nhớ. Khi bạn tắt bộ nhớ được phân bổ cho các mục đích sử dụng khác của hệ điều hành, PC của bạn có thể sẽ chỉ hiển thị khoảng 3,25GB bộ nhớ có thể sử dụng. Di chuyển đến 64 bit và giới hạn này biến mất.

Nếu bạn làm phát triển nghiêm túc thì điều này có thể rất quan trọng. Hãy thử chạy một số máy ảo và bạn sẽ sớm hết bộ nhớ. Máy chủ có nhiều khả năng cần thêm bộ nhớ và vì vậy bạn sẽ thấy rằng việc sử dụng 64 bit trên máy chủ lớn hơn nhiều so với máy tính để bàn. Định luật Moore đảm bảo rằng chúng ta sẽ có nhiều bộ nhớ hơn trên các máy và vì vậy tại một số điểm, máy tính để bàn cũng sẽ chuyển sang 64 bit làm tiêu chuẩn.

Để biết mô tả chi tiết hơn về sự khác biệt của bộ xử lý, hãy xem bài viết tuyệt vời này từ ArsTechnica .


7
Nền tảng 32 bit và giới hạn 4GB có phần sai lệch và chủ yếu là giới hạn lựa chọn / thiết kế kiến ​​trúc hệ điều hành. Thực sự, 4GB từ 32 bit thực sự bị giới hạn trong không gian VA quá trình. Địa chỉ vật lý hỗ trợ 36 bit trên CPU Intel 32 bit
Tall Jeff

1
Bạn làm cho một điểm tốt đó là chắc chắn đúng. Nhưng tác động trong thế giới thực của người dùng PC là máy sẽ không sử dụng đầy đủ 4GB mà họ đã trả tiền. Bố tôi gặp vấn đề này và vẫn còn bối rối rằng 4GB mà ông đã trả tiền không thể được sử dụng đầy đủ.

2
Đánh giá cao quan điểm của bạn, nhưng chỉ cố gắng đưa ra quan điểm rằng bản sửa lỗi không nằm trong bộ xử lý hoặc chuyển sang 64 bit, đó chỉ là vấn đề thiết kế hệ điều hành được cải thiện đôi chút. Điều này được giải quyết, ví dụ, trên các phiên bản Windows dành cho doanh nghiệp thậm chí trở lại phiên bản 32 bit. Nó cho phép 64GB RAM.
Cao Jeff

Về mặt kỹ thuật, giới hạn không biến mất. Nó di chuyển xa hơn đến nơi không thực tế / không thể cài đặt nhiều RAM đó trên máy bất cứ lúc nào trong thập kỷ tới.

Xem nhận xét của tôi về PAE ở trên: giới hạn 4GB không đúng với toàn bộ hệ thống - nhưng chỉ áp dụng cho các quy trình đơn lẻ (không có quy trình nào có thể truy cập 4GB trở lên - nhưng toàn bộ hệ thống, tức là tất cả các quy trình đều có thể bật PAE ). Vì vậy, trừ khi người ta có các ứng dụng thu lợi từ việc có thể truy cập 4GB trở lên (chẳng hạn như trình chỉnh sửa / chuyển đổi video có tệp video lớn) 8GB + được cài đặt, thì không nên tạo ra nhiều khác biệt dù sử dụng 32 bit hay 64 bit.
Izzy

31

Không có gì là miễn phí: mặc dù các ứng dụng 64 bit có thể truy cập nhiều bộ nhớ hơn các ứng dụng 32 bit, nhưng nhược điểm là chúng cần nhiều bộ nhớ hơn. Tất cả những con trỏ trước đây cần 4 byte, giờ chúng cần 8. Ví dụ, yêu cầu mặc định trong Emacs là bộ nhớ nhiều hơn 60% khi được xây dựng cho kiến ​​trúc 64 bit. Dấu chân thêm này làm tổn thương hiệu năng ở mọi cấp độ của hệ thống phân cấp bộ nhớ: các tệp thực thi lớn hơn mất nhiều thời gian hơn để tải từ đĩa, các bộ làm việc lớn hơn gây ra nhiều phân trang hơn và các đối tượng lớn hơn có nghĩa là ít bộ đệm hơn trong bộ xử lý. Nếu bạn nghĩ về CPU có bộ đệm L1 16K, ứng dụng 32 bit có thể hoạt động với 4096 con trỏ trước khi nó bỏ lỡ và chuyển đến bộ đệm L2 nhưng ứng dụng 64 bit phải tiếp cận bộ đệm L2 chỉ sau 2048 con trỏ.

Trên x64, điều này được giảm bớt bởi các cải tiến kiến ​​trúc khác như nhiều thanh ghi hơn, nhưng trên PowerPC nếu ứng dụng của bạn không thể sử dụng> 4G, nó có khả năng chạy nhanh hơn trên "ppc" so với "ppc64". Ngay cả trên Intel cũng có khối lượng công việc chạy nhanh hơn trên x86 và một số ít chạy nhanh hơn 5% trên x64 so với x86.


2
Câu trả lời này cho thấy PowerPC64 không tốt bằng x86-64. Sự thật là powerpc64 không cải thiện powerpc, vì powerpc không bị hỏng.
ctrl-alt-delor

3
Linux hiện có x32 ABI, với tất cả các lợi ích tốc độ của x86-64 (nhiều thanh ghi hơn, ABI được thiết kế lại), nhưng với con trỏ 32 bit. +1 để chỉ ra rằng lợi ích của chế độ 64 bit không phải từ việc tăng chiều rộng thực tế, mà là từ cơ hội giảm rất nhiều hành lý đang giữ lại kiến ​​trúc. Reg 64bit có giá trị cho một số ứng dụng, nhưng không gian con trỏ 64 bit thường ít cần thiết hơn.
Peter Cordes

19

Một hệ điều hành 64 bit có thể sử dụng nhiều RAM hơn. Đó là về nó, trong thực tế. Vista / 7 64 bit sử dụng các tính năng an toàn dễ hiểu hơn cho vị trí chúng đặt các thành phần quan trọng trong RAM, nhưng điều đó không thực sự "đáng chú ý" như vậy.

Từ ChrisInEd hôm nay:

Hệ điều hành 32 bit trên hệ thống ix86 với PAE có thể giải quyết tối đa 64 GB RAM. Một hệ điều hành 64 bit trên x86-64 có thể truy cập tới 256 TB không gian địa chỉ ảo, mặc dù điều này có thể được nâng lên trong các bộ xử lý tiếp theo, lên tới 16 EB. Lưu ý rằng một số hệ điều hành giới hạn không gian địa chỉ hơn nữa và hầu hết các bo mạch chủ sẽ có các hạn chế bổ sung.


4
Đối với HĐH, CHỈ 32 bit so với 64 bit chỉ kích thước của các con trỏ (đoạn đầu tiên của bạn thảo luận chính xác). -1: Một số HĐH chọn khóa kích thước số nguyên mặc định thành kích thước con trỏ, nhưng cả Windows và Linux đều không làm như vậy. Độ chính xác toán học là không thay đổi. KHÔNG có hệ điều hành được sử dụng rộng rãi làm thay đổi độ chính xác của dấu phẩy động (những gì đoạn thứ hai tuyên bố). "float" hoặc "single" là 32 bit, "double" là 64 bit, bất kể HĐH sử dụng con trỏ 32 bit hay 64 bit.
Ông Fooz

À, tôi rõ ràng đã nhầm, cảm ơn vì đã xóa nó đi :)
Phoshi

Không vấn đề gì. -1 -> +1
Ông Fooz

Có thể đáng để chỉnh sửa câu trả lời của bạn để cho biết có thể truy cập bao nhiêu RAM. Hệ điều hành 32 bit trên hệ thống ix86 với PAE có thể giải quyết tối đa 64 GB RAM. Một hệ điều hành 64 bit trên x86-64 có thể truy cập tới 256 TB không gian địa chỉ ảo, mặc dù điều này có thể được nâng lên trong các bộ xử lý tiếp theo, lên tới 16 EB. Lưu ý rằng một số hệ điều hành giới hạn không gian địa chỉ hơn nữa và hầu hết các bo mạch chủ sẽ có các hạn chế bổ sung.
ChrisInEd hôm

Tôi muốn giữ cho nó đơn giản, vì các con số hầu như đủ cao để không liên quan vào lúc này, nhưng bây giờ không thể làm tổn thương chúng.
Phoshi

14

Không chắc chắn tôi có thể trả lời tất cả các câu hỏi của bạn mà không cần viết toàn bộ bài luận (luôn có Google ...), nhưng bạn không cần thiết kế ứng dụng của mình khác nhau cho 64 bit. Tôi đoán những gì đang được đề cập là bạn phải chú ý đến những thứ như kích thước con trỏ không còn cùng kích thước với ints. Và bạn có toàn bộ các vấn đề tiềm ẩn với các giả định sẵn có trên một số loại dữ liệu nhất định dài bốn byte có thể không còn đúng nữa.

Điều này có khả năng làm tăng tất cả mọi thứ trong ứng dụng của bạn - mọi thứ từ lưu / tải từ tệp, lặp qua dữ liệu, căn chỉnh dữ liệu, tất cả các cách cho đến thao tác bit trên dữ liệu. Nếu bạn có một cơ sở mã hiện tại mà bạn đang cố gắng chuyển hoặc làm việc trên cả hai, có khả năng bạn sẽ có rất nhiều khúc mắc nhỏ để xử lý.

Tôi nghĩ rằng đây là một vấn đề thực hiện, chứ không phải là một thiết kế. Tức là tôi nghĩ rằng "thiết kế" của nói, một gói chỉnh sửa ảnh sẽ giống như bất cứ từ nào. Chúng tôi viết mã biên dịch cho cả hai phiên bản 32 bit và 64 bit, và thiết kế chắc chắn không khác nhau giữa hai phiên bản - đó là cùng một cơ sở mã.

"Vấn đề lớn" cơ bản trên 64 bit là bạn có quyền truy cập vào không gian địa chỉ bộ nhớ lớn hơn nhiều so với 32 bit. Điều này có nghĩa là bạn thực sự có thể chộp được hơn 4Gb bộ nhớ vào máy tính của mình và thực sự nó sẽ tạo ra sự khác biệt.

Tôi chắc chắn rằng các câu trả lời khác sẽ đi vào chi tiết và lợi ích nhiều hơn tôi.

Về mặt phát hiện sự khác biệt sau đó theo chương trình, bạn chỉ cần kiểm tra kích thước của một con trỏ (ví dụ sizeof (void *)). Câu trả lời của 4 có nghĩa là 32 bit của nó và 8 có nghĩa là bạn đang chạy trong môi trường 64 bit.


4
Nếu bạn viết các chương trình tình cờ cho rằng các loại con trỏ nhất định có cùng kích thước với các loại tích phân nhất định, thì bạn sẽ sử dụng nó. Điều này đã đúng trong một thời gian dài.
David Thornley

@David: Bạn hoàn toàn đúng. Thật không may, có một tấn mã ngoài đó thực hiện chính xác điều đó.

10

Một quá trình 32 Bit có không gian địa chỉ ảo là 4 GB; điều này có thể là quá ít đối với một số ứng dụng. Ứng dụng 64 Bit có không gian địa chỉ hầu như không giới hạn (tất nhiên là có giới hạn, nhưng rất có thể bạn sẽ không đạt giới hạn này).

Trên OSX có những lợi thế khác. Xem bài viết sau , tại sao việc kernel chạy trong không gian địa chỉ 64 Bit (bất kể ứng dụng của bạn chạy 64 hay 32) hay ứng dụng của bạn chạy trong không gian địa chỉ 64 Bit (trong khi kernel vẫn là 32 Bit) dẫn đến hiệu suất tốt hơn nhiều. Tóm lại: Nếu một trong hai là 64 Bit (nhân hoặc ứng dụng hoặc cả hai), thì TLB ("bộ đệm tìm dịch") không phải bị xóa bất cứ khi nào bạn chuyển từ kernel sang sử dụng dung lượng và quay lại (sẽ tăng tốc truy cập RAM).

Ngoài ra, bạn có hiệu suất tăng khi làm việc với các biến "long long int" (biến 64 bit như uint64_t). CPU 32 Bit có thể cộng / chia / trừ / nhân hai giá trị 64 Bit, nhưng không hoạt động trong một hoạt động phần cứng. Thay vào đó, nó cần chia hoạt động này thành hai (hoặc nhiều hơn) hoạt động 32 Bit. Vì vậy, một ứng dụng hoạt động nhiều với số 64 Bit sẽ tăng tốc độ có thể thực hiện toán 64 bit trực tiếp trong phần cứng.

Cuối cùng nhưng không kém phần quan trọng, kiến ​​trúc x86-64 cung cấp nhiều thanh ghi hơn kiến ​​trúc x86 cổ điển. Làm việc với các thanh ghi nhanh hơn nhiều so với làm việc với RAM và CPU càng có nhiều thanh ghi thì càng ít phải trao đổi các giá trị thanh ghi sang RAM và quay lại các thanh ghi.

Để tìm hiểu xem CPU của bạn có thể chạy ở chế độ 64 Bit hay không, bạn có thể xem xét các biến sysctl khác nhau. Ví dụ: mở một thiết bị đầu cuối và gõ

sysctl machdep.cpu.extfeatures

Nếu nó liệt kê EM64T, CPU của bạn hỗ trợ không gian địa chỉ 64 Bit theo tiêu chuẩn x86-64. Bạn cũng có thể tìm kiếm

sysctl hw.optional.x86_64

Nếu nó nói 1 (đúng / được bật), CPU của bạn hỗ trợ chế độ x86-64 Bit, nếu nó nói 0 (sai / bị vô hiệu hóa) thì không. Nếu hoàn toàn không tìm thấy cài đặt, hãy xem nó là sai.

Lưu ý: Bạn cũng có thể tìm nạp các biến sysctl từ trong ứng dụng C gốc, không cần sử dụng công cụ dòng lệnh. Xem

man 3 sysctl

lỗi: "machdep.cpu.extfeatures" là một khóa không xác định

Tôi đoán nó cũng không được gọi là EM64T, nếu bạn không may có intel.

9

Lưu ý rằng không gian địa chỉ có thể được sử dụng cho nhiều hơn bộ nhớ (thực). Người ta cũng có thể ánh xạ các tệp lớn, có thể cải thiện hiệu suất trong các mẫu truy cập kỳ quặc hơn vì bộ nhớ đệm cấp VM mức khối hiệu quả và mạnh hơn sẽ an toàn hơn khi phân bổ các khối bộ nhớ lớn trên 64 bit vì heapmanager ít hơn có khả năng gặp phải sự phân mảnh không gian địa chỉ không cho phép nó phân bổ một khối lớn.

Một số điều được nói trong luồng này (như nhân đôi số thanh ghi #) chỉ áp dụng cho x86-> x86_64, không áp dụng cho 64-bit nói chung. Giống như thực tế là dưới x86_64, một người được bảo đảm có SSE2, 686 opcodes và một cách rẻ tiền để làm PIC. Các tính năng này hoàn toàn không phải là về 64 bit, mà là về việc cắt giảm di sản và khắc phục các hạn chế x86 đã biết

Ngoài ra, mọi người thường chỉ tăng gấp đôi số thanh ghi là nguyên nhân của việc tăng tốc, trong khi nhiều khả năng SSE2 mặc định sử dụng để thực hiện thủ thuật (tăng tốc memcpy và các chức năng tương tự). Nếu bạn bật cùng một bộ cho x86, sự khác biệt sẽ nhỏ hơn. (*) (***)

Ngoài ra, hãy nhớ rằng thường có hình phạt ban đầu liên quan vì cấu trúc dữ liệu trung bình sẽ tăng đơn giản vì kích thước của một con trỏ lớn hơn. Điều này cũng có hiệu ứng bộ đệm, nhưng đáng chú ý hơn trong thực tế là memcpy trung bình () (hoặc bất cứ điều gì tương đương với bản sao bộ nhớ trong ngôn ngữ của bạn) sẽ mất nhiều thời gian hơn. Đây chỉ là độ lớn của một vài phần trăm btw, nhưng các tốc độ được đặt tên ở trên cũng nằm trong độ lớn đó.

Thông thường chi phí căn chỉnh cũng lớn hơn trên các kiến ​​trúc 64 bit (các bản ghi 32 bit trước đây thường chỉ trở thành hỗn hợp của các giá trị 32 bit và 64 bit), làm nổ tung các cấu trúc thậm chí nhiều hơn.

Nhìn chung, các thử nghiệm đơn giản của tôi cho thấy chúng sẽ triệt tiêu lẫn nhau, nếu trình điều khiển và thư viện thời gian chạy đã hoàn toàn thích nghi, không tạo ra sự khác biệt đáng kể về tốc độ cho ứng dụng trung bình. Tuy nhiên, một số ứng dụng có thể đột nhiên tăng tốc nhanh hơn (ví dụ: khi phụ thuộc vào AES) hoặc chậm hơn (cơ sở hạ tầng quan trọng liên tục được di chuyển xung quanh / quét / đi bộ và chứa rất nhiều con trỏ). Các thử nghiệm đã có trên Windows, và do đó tối ưu hóa PIC không được điểm chuẩn.

Lưu ý rằng hầu hết các ngôn ngữ JIT-VM (Java, .NET) sử dụng con trỏ trung bình nhiều hơn đáng kể (bên trong) so với C ++. Có lẽ việc sử dụng bộ nhớ của họ tăng hơn so với chương trình trung bình, nhưng tôi không dám đánh đồng điều đó trực tiếp với các hiệu ứng làm chậm (vì đây là những con thú thực sự phức tạp và vui nhộn và thường khó dự đoán mà không đo lường được)

Windows 64-bit mặc định sử dụng SSE2 cho điểm nổi dường như tăng tốc các hoạt động đơn giản và làm chậm các hoạt động phức tạp (sin, cos, v.v.).

(*) một thực tế ít được biết đến là số lượng thanh ghi SSE cũng tăng gấp đôi trong chế độ 64 bit

(**) Tiến sĩ Dobbs đã có một bài viết hay về nó vài năm trước.


8

Bên cạnh các vấn đề về không gian bộ nhớ rõ ràng mà hầu hết mọi người đang đề cập ở đây, tôi nghĩ rằng đáng để xem xét khái niệm "tính toán từ rộng" mà Knuth (trong số những người khác) đã nói gần đây. Có rất nhiều hiệu quả đạt được thông qua thao tác bit, và các thao tác bit trên một từ 64 bit đi xa hơn nhiều so với từ 32 bit. Nói tóm lại, bạn có thể thực hiện nhiều thao tác hơn trong các thanh ghi mà không phải nhấn bộ nhớ và từ góc độ hiệu suất, đó là một chiến thắng khá lớn.

Hãy xem Tập 4, Tiền phát hành 1A để biết một số ví dụ về các thủ thuật hay mà tôi đang nói đến.


7

Ngoài khả năng giải quyết nhiều bộ nhớ hơn x86_64 còn có nhiều thanh ghi hơn cho phép trình biên dịch tạo mã hiệu quả hơn. Sự cải thiện hiệu suất thường sẽ khá nhỏ mặc dù.

Kiến trúc x86_64 tương thích ngược với x86. Có thể chạy các hệ điều hành 32 bit chưa sửa đổi. Cũng có thể chạy phần mềm 32 bit chưa sửa đổi từ HĐH 64 bit. Điều đó sẽ yêu cầu tất cả các thư viện 32 bit thông thường mặc dù. Họ có thể cần phải được cài đặt riêng.


Nhiều thanh ghi hơn và ABI được thiết kế lại (hàm truyền đạt đối số trong thanh ghi) thường là tốc độ tăng tốc 10 đến 15%, khá tốt. Hiện tại đã có x32 Linux ABI với các con trỏ 32 bit, nhưng sử dụng chế độ dài amd64 và các quy ước gọi đăng ký tham số. Vì vậy, bạn có tất cả các lợi ích tốc độ của amd64, nhưng không cần đến 64 bit cho mỗi con trỏ. Nó tốt cho mọi thứ không cần> 4GB bộ nhớ (ảo).
Peter Cordes

6

Chủ đề này đã quá dài rồi, nhưng ...

Hầu hết các câu trả lời tập trung vào thực tế là bạn có không gian địa chỉ 64 bit lớn hơn, do đó bạn có thể giải quyết nhiều bộ nhớ hơn. Đối với khoảng 99% tất cả các ứng dụng, điều này là hoàn toàn không liên quan. Whoop lớn.

Các thực lý do 64-bit là tốt là không rằng thanh ghi lớn hơn, nhưng có hai lần như nhiều trong số họ! Điều đó có nghĩa là trình biên dịch có thể giữ nhiều giá trị của bạn trong thanh ghi thay vì đổ chúng vào bộ nhớ và tải lại chúng trong một vài hướng dẫn sau. Nếu và khi một trình biên dịch tối ưu hóa đang hủy kiểm soát các vòng lặp của bạn cho bạn, thì nó có thể hủy kiểm soát chúng khoảng gấp đôi, điều này thực sự có thể giúp hiệu suất.

Ngoài ra, các quy ước của người gọi / callee chương trình con cho 64-bit đã được xác định để giữ hầu hết các tham số đã truyền trong các thanh ghi thay vì người gọi đẩy chúng lên ngăn xếp và callee bật chúng ra.

Vì vậy, một ứng dụng C / C ++ "điển hình" sẽ có được sự cải thiện hiệu suất 10% hoặc 15% chỉ bằng cách biên dịch lại cho 64 bit. (Giả sử một số phần của ứng dụng đã được tính toán ràng buộc. Tất nhiên, đây không phải là bảo đảm; Tất cả các máy tính đều có tốc độ như nhau. Mileage May Vary.)


Mặc dù bộ hướng dẫn tốt hơn cho x64 so với x86, nhưng điều đó thường sẽ không quan trọng. Mã 64 bit có thể chậm hơn 32 bit, bởi vì các hướng dẫn có thể lớn hơn, do đó, ít hơn trong số chúng phù hợp với bộ đệm. (Các vòng lặp không kiểm soát, BTW, là một kỹ thuật rất đáng nghi vấn hiện nay, vì nó sẽ làm tăng số lần bỏ lỡ bộ đệm.) Khi tôi làm việc, chúng tôi cần 64 bit để tăng địa chỉ bộ nhớ.
David Thornley

David, Các tập lệnh x64 và x86 gần như giống hệt nhau, ngoại trừ kích thước toán hạng và một số tiền tố đăng ký. Với IA64, còn gọi là Itanium aka Itanic, mã 64 bit thường sẽ gấp 3 lần mã x86 và nhấn mạnh bộ đệm của lệnh chính xác như bạn nói. Đó là một yếu tố lớn tại sao kiến ​​trúc đó thất bại thảm hại. Nhưng với x86 aka AMD64 hay EM64T, tốc độ tăng trưởng mã đó thường chỉ là 10-20%.

Mặc dù x64 làm cho nhiều thanh ghi có thể truy cập được , nhưng tôi không chắc là nó thực sự tăng số lượng thanh ghi vật lý khả dụng đến mức nào - tất cả các bộ xử lý x86 gần đây đều có nhiều thanh ghi "bóng tối" và sử dụng "đổi tên đăng ký" + thực hiện đầu cơ để cho phép các đường dẫn mã độc lập thực thi song song với một mức độ. Trong thực tế, nếu n đường dẫn mã độc lập đang thực thi, gấp n lần số lượng thanh ghi có sẵn (cho đến khi tất cả các thanh ghi bóng hết).

@j_random_hacker. Bạn hoàn toàn đúng khi những mánh khóe đó đang diễn ra bên dưới kiến ​​trúc. Nhưng cho dù có bao nhiêu thanh ghi bóng có sẵn, nếu chương trình cần hoạt động với hơn 8 mục dữ liệu và chỉ có 8 thanh ghi được hiển thị trong tập lệnh, trình biên dịch phải tạo hướng dẫn lưu trữ / tải lại. Vì vậy, có, X64 thực sự làm gấp đôi số lượng đăng ký "có sẵn"

Kinh nghiệm của tôi là điều này ít hơn và được bù đắp bởi thực tế là phần ghi nhớ avg được di chuyển lớn hơn.
Marco van de Voort

6

Ngoài những lợi thế đã được đề cập ở đây, một số chi tiết khác liên quan đến bảo mật:

  • x86_64 cpus có bit không thực thi trong bảng trang của chúng. Tức là điều này có thể ngăn chặn việc khai thác bí mật gây ra bởi lỗi tràn bộ đệm. 32 bit x86 cpus chỉ hỗ trợ tính năng này trong chế độ PAE.
  • Không gian địa chỉ lớn hơn cho phép ngẫu nhiên hóa bố cục không gian địa chỉ (ASLR) tốt hơn, khiến việc khai thác bộ đệm tràn ngập khó khăn hơn.
  • x86_64 cpus có mã độc lập với vị trí, tức là truy cập dữ liệu liên quan đến thanh ghi con trỏ lệnh (RIP).

Một ưu điểm khác xuất hiện trong đầu là số lượng bộ nhớ liền kề ảo được phân bổ vmalloc()trong nhân Linux có thể lớn hơn ở chế độ 64 bit.


5

Với máy 32 bit, bạn chỉ có 4.294.967.295 byte bộ nhớ để giải quyết. Với máy 64 bit, bạn có bộ nhớ 1.84467441 × 10 ^ 19 byte.

Wikipedia nói điều này

Bộ xử lý 64 bit tính toán các tác vụ cụ thể (chẳng hạn như giai thừa của các số liệu lớn) nhanh gấp đôi so với làm việc trong môi trường 32 bit (ví dụ cụ thể được lấy từ so sánh giữa Máy tính Windows 32 bit và 64 bit; ). Điều này mang lại cảm giác chung về khả năng lý thuyết của các ứng dụng được tối ưu hóa 64 bit.

Trong khi các kiến ​​trúc 64 bit không thể chối cãi làm việc với các tập dữ liệu lớn trong các ứng dụng như video kỹ thuật số, máy tính khoa học và cơ sở dữ liệu lớn dễ dàng hơn, đã có tranh luận đáng kể về việc liệu chúng hoặc các chế độ tương thích 32 bit của chúng sẽ nhanh hơn so với giá tương đương Hệ thống 32 bit cho các nhiệm vụ khác. Trong kiến ​​trúc x86-64 (AMD64), phần lớn các hệ điều hành và ứng dụng 32 bit có thể chạy trơn tru trên phần cứng 64 bit.

Các máy ảo Java 64 bit của Sun khởi động chậm hơn các máy ảo 32 bit của họ vì Sun chỉ triển khai trình biên dịch JIT "máy chủ" (C2) cho các nền tảng 64 bit. [9] Trình biên dịch JIT "client" (C1), tạo mã kém hiệu quả hơn nhưng biên dịch nhanh hơn nhiều, không khả dụng trên nền tảng 64 bit.

Cần lưu ý rằng tốc độ không phải là yếu tố duy nhất để xem xét khi so sánh bộ xử lý 32 bit và 64 bit. Các ứng dụng như đa tác vụ, kiểm tra căng thẳng và phân cụm (cho tính toán hiệu năng cao), HPC, có thể phù hợp hơn với kiến ​​trúc 64 bit được triển khai chính xác. Vì lý do cụm 64 bit đã được triển khai rộng rãi trong các tổ chức lớn như IBM, HP và Microsoft, vì lý do này.


2
Độ dài bus địa chỉ vật lý không phụ thuộc vào bộ xử lý 32 hay 64 bit. Một số bộ xử lý 32 bit có bus địa chỉ lớn hơn 32 bit và không có bộ xử lý 64 bit nào có bus địa chỉ 64 bit.

1
Đã đồng ý. Về lý thuyết, không gian địa chỉ là 2 ^ 64. Trong thực tế, các nhà sản xuất CPU đang sử dụng các giá trị nhỏ hơn ... như 2 ^ 40 hoặc 2 ^ 48.
Stu Thompson

5

Báo giá từ Microsoft.com:

Trong bảng sau, tài nguyên tối đa tăng của máy tính dựa trên phiên bản Windows 64 bit và bộ xử lý Intel 64 bit được so sánh với mức tối đa tài nguyên 32 bit hiện có.

Bảng MS


2
Thú vị, nhưng đáng chú ý là một số phiên bản Windows 32 bit cho phép bộ nhớ VẬT LÝ nhiều hơn. Xem ví dụ, en.wikipedia.org/wiki/iêu
ChrisInEd hôm

@ChrisInEd hôm nay, hệ thống hỗ trợ nhiều hơn 4GB hoặc bộ nhớ nhưng địa chỉ cho mỗi quy trình vẫn giới hạn ở mức 2GB (3GB với nhận biết địa chỉ lớn). Vì vậy, ngay cả khi hệ thống của bạn có nhiều bộ nhớ, nó vẫn không giúp các chương trình được mở rộng bộ nhớ và hiệu suất vẫn bị tụt lại so với phiên bản 64 bit. Ngoài ra, nó có phạm vi địa chỉ nhỏ hơn nhiều cho ASLR và tệp ánh xạ bộ nhớ
phuclv

4

Kristof và Poshi đã tuyên bố sự khác biệt kỹ thuật chính giữa HĐH 32 và 64 bit ', trải nghiệm người dùng thường khác nhiều so với lý thuyết. Các phiên bản dành cho người dùng 64 bit của Windows cho đến nay (XP và Vista) có lỗ hổng lớn trong hỗ trợ trình điều khiển của họ. Tôi đã có nhiều máy in, máy quét và các thiết bị bên ngoài khác không hoạt động với các phiên bản 64 bit hoạt động tốt với các phiên bản 32 bit. Đây là những thiết bị có trình điều khiển 64 bit và chúng vẫn không hoạt động. Tại thời điểm này, tôi khuyên bạn nên tránh xa mọi thứ mà người tiêu dùng dựa trên 64 bit từ Microsoft cho đến khi bạn nghe về cách Windows 7 xử lý việc này, từ người dùng cuối thực sự, không chỉ những người yêu thích hiện đang truy cập vào nó. Cho nó ít nhất 6 tháng và xem những gì mọi người đang trải qua.


Có thể có ít trình điều khiển hơn nhưng nó không thực sự tệ như điều này làm cho âm thanh. Tôi đã chạy 64 bit kể từ năm 2007 và chưa bao giờ gặp khó khăn gì. Phải nói rằng, tôi không có bất kỳ thiết bị cổ xưa hay tối nghĩa nào được kết nối.
RomanSt

1
Cái gần đây nhất của tôi với Vista 64 bit là một máy in đa chức năng hoàn toàn mới của HP chỉ mới tháng trước trên hệ thống Dell 2 tháng tuổi. Cả Dell và HP đều từ bỏ và khách hàng của tôi đã trả tiền cho tôi để cài XP Pro và thoát khỏi Vista. Không có gì tối nghĩa về một trong hai đơn vị.
Kevin K

1
Thông thường nếu bạn mua một máy tính có HĐH 64 bit, mọi thứ sẽ hoạt động. Tôi nên cẩn thận trước khi thử cập nhật máy tính cũ hơn hoặc nếu tôi có máy in cũ hơn hoặc nếu tôi muốn tự nâng cấp.
David Thornley

Phần cứng muốn gắn nhãn Công trình với Windows hoặc Được chứng nhận để sử dụng với logo Windows phải cung cấp trình điều khiển 64 bit. Có thể tìm kiếm lần sau. Nhưng thực tế, đôi khi các nhà cung cấp không bận tâm đến phần cứng của người tiêu dùng vì hầu hết người tiêu dùng có thể vẫn sẽ sử dụng 32 bit.
Joey

2

Một số chương trình chơi trò chơi sử dụng một đại diện bảng bit . Ví dụ, cờ, cờ và othello có một bảng 8 x 8, tức là 64 ô vuông, do đó, có ít nhất 64 bit trong một từ máy giúp hiệu suất đáng kể.

Tôi nhớ đã đọc về một chương trình cờ vua có bản dựng 64 bit nhanh gần gấp đôi so với phiên bản 32 bit.


2

Thuật ngữ 32 bit và 64 bit dùng để chỉ cách bộ xử lý máy tính (còn gọi là CPU), xử lý thông tin. Các phiên bản Windows 64 bit xử lý một lượng lớn bộ nhớ truy cập ngẫu nhiên (RAM) hiệu quả hơn các hệ thống 32 bit.

tốc độ có thể khác nhau theo ý kiến ​​của tôi


1

Một điểm khác liên quan đến Microsoft Windows là trong nhiều năm qua đã có API Win32 dành cho hệ điều hành 32 bit và không được tối ưu hóa cho việc biên dịch 64 bit. Khi tôi viết một số DLL cho các ứng dụng của mình, tôi thường biên dịch trong Win32 không phải là phiên bản 64 bit. Trước Vista, chưa có nhiều phiên bản Windows 64 bit thành công mà tôi tin là nơi tôi làm việc, máy mới của tôi có RAM 4 GB nhưng tôi vẫn đang sử dụng Windows XP Pro 32 bit vì đây là O / ổn định đã biết S liên quan đến XP64 hoặc Vista.

Tôi nghĩ rằng bạn cũng có thể muốn nhìn lại khi có sự thay đổi từ 16 bit sang 32 bit để biết thêm chi tiết về lý do tại sao sự thay đổi có thể là một vấn đề lớn đối với một số người. Các ứng dụng quan trọng mà một công ty có thể chạy trên máy tính để bàn, ví dụ như các gói kế toán nhỏ, có thể không chạy trên hệ điều hành 64 bit và do đó cần phải giữ một máy kế thừa, ảo hoặc thực.

Thay đổi kích thước của một địa chỉ có thể có một số phân nhánh và hậu quả lớn.


1

Đối với hầu hết các mục đích thực tế, bạn có thể sẽ không nhận thấy một sự khác biệt.

Bạn phải có CPU 64 bit (hầu hết các CPU trong vài năm qua) để cài đặt hệ điều hành 64 bit.

Có một vài lợi thế cho hệ điều hành 64 bit:

  • Nó sẽ cho phép bạn chạy hơn 4GB RAM (số lượng tối đa bạn có thể xử lý trong HĐH 32 bit là 2 ^ 32 = 4GB)
  • Nó rất hữu ích để làm việc với các tập dữ liệu lớn (ví dụ như trong Excel) và một số tác vụ tính toán chuyên sâu nhất định (ví dụ: Photoshop và các tệp lớn)
  • Bạn chỉ có thể chạy chương trình 64 bit trên HĐH 64 bit, nhưng bạn có thể chạy chương trình 32 bit trên cả hai (hãy nhớ rằng có rất nhiều chương trình có cả hai, vì vậy không có quá nhiều 64 bit Chương trình).

Trong hầu hết các kịch bản, các chương trình 64 bit sử dụng bộ nhớ nhiều hơn một chút, nhưng đối với máy tính cá nhân, điều này thường không được chú ý.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.