Xin lỗi nếu câu hỏi có vẻ ngu ngốc. Tôi chỉ mơ hồ nhận thức được vấn đề liên kết dữ liệu và chưa bao giờ thực hiện bất kỳ chương trình 64 bit nào. Tôi đang làm việc trên một số mã x86 32-bit ngay bây giờ. Nó thường xuyên truy cập một mảng int. Đôi khi một số nguyên 32 bit được đọc. Đôi khi hai hoặc nhiều hơn được đọc. Tại một số điểm tôi muốn làm cho mã 64-bit. Những gì tôi không chắc là liệu tôi có nên khai báo mảng int này là int
hoặc long int
. Tôi thà giữ chiều rộng của số nguyên như nhau, vì vậy tôi không phải lo lắng về sự khác biệt. Tôi lo lắng rằng việc đọc/ghi một địa chỉ không phù hợp với từ tự nhiên có thể chậm.Có thể truy cập hình phạt hiệu suất một mảng các số nguyên 32 bit trong x86-64 không?
Trả lời
Hình phạt không chính xác chỉ xảy ra khi tải hoặc lưu trữ vượt qua ranh giới căn chỉnh. Ranh giới là thường là nhỏ hơn:
- Kích thước từ tự nhiên của phần cứng. (32 bit hoặc 64 bit *)
- Kích thước của kiểu dữ liệu.
Nếu bạn đang tải từ 4 byte lên kiến trúc 64 bit (8 byte). Nó không cần phải được liên kết 8 byte. Nó chỉ cần được liên kết 4 byte.
Tương tự như vậy, nếu bạn đang tải một char 1 byte trên bất kỳ máy nào, nó không cần phải được căn chỉnh chút nào.
* Lưu ý rằng véc tơ SIMD có thể ngụ ý kích thước từ tự nhiên lớn hơn. Ví dụ, SSE 16 byte vẫn yêu cầu căn chỉnh 16 byte trên cả x86 và x64. (Trừ tải lệch rõ ràng/cửa hàng)
Vì vậy, trong ngắn hạn, không có bạn không phải lo lắng về dữ liệu liên kết. Ngôn ngữ và trình biên dịch cố gắng khá khó khăn để ngăn bạn không phải lo lắng về nó.
Vì vậy, chỉ cần gắn bó với bất kỳ kiểu dữ liệu nào có ý nghĩa nhất đối với bạn.
Có rất nhiều thông tin tốt có sẵn ở đây: Performance 32 bit vs. 64 bit arithmetic
Thậm chí nhiều hơn thông tin https://superuser.com/questions/56540/32-bit-vs-64-bit-systems, nơi mà các câu trả lời khẳng định đã nhìn thấy điều tồi tệ nhất làm chậm ở mức 5% (từ một góc độ ứng dụng, chứ không phải hoạt động cá nhân).
Câu trả lời ngắn gọn là không, bạn sẽ không thực hiện lần truy cập hiệu suất.
CPU 64-bit x86 vẫn được tối ưu hóa rất nhiều để thao tác hiệu quả các giá trị 32 bit. Ngay cả trên các hệ điều hành 64 bit, việc truy cập các giá trị 32 bit cũng nhanh nhất khi truy cập các giá trị 64 bit. Trong thực tế, nó sẽ thực sự nhanh hơn vì ít dung lượng bộ nhớ đệm và băng thông bộ nhớ được tiêu thụ.
Bất cứ khi nào bạn truy cập vào bất kỳ vị trí bộ nhớ nào, toàn bộ dòng bộ nhớ cache được đọc vào bộ đệm L1 và mọi truy cập sau đó vào bất kỳ thứ gì trong dòng đó càng nhanh càng tốt. Trừ khi truy cập 32-bit của bạn đi qua một đường bộ nhớ cache (mà nó sẽ không nếu nó trên một sự liên kết 32-bit) nó sẽ nhanh như truy cập 64-bit.
Không hoàn toàn. Truy cập 1 giá trị sẽ giống nhau. Nếu bạn truy cập * một giá trị 32 bit khác nằm trong cùng một dòng bộ nhớ cache, nó sẽ xuất hiện ở đó - bạn thậm chí còn nói điều này với "tiếp theo ...". Việc sử dụng kích thước dữ liệu nhỏ hơn thường thân thiện với bộ nhớ cache hơn do tải nhiều phần tử dữ liệu hơn cho mỗi dòng bộ nhớ cache. – phkahler
- 1. Python, cách đặt số nguyên 32 bit vào mảng byte
- 2. Có một hình phạt hiệu suất bằng cách "ẩn" các đối tượng ngoài màn hình bằng số tiền vô lý?
- 3. Có thể truy cập dll 64 bit từ ứng dụng 32 bit không?
- 4. Bản đồ một phao 32 bit đến một số nguyên 32 bit
- 5. NET Stopwatch - hiệu suất phạt
- 6. Hiệu suất Java 64 bit
- 7. Nhân SSE 4 số nguyên 32 bit
- 8. Bit đóng gói mảng các số nguyên
- 9. Javascript - chuyển đổi số nguyên thành mảng của các bit
- 10. javascript đối tượng truy cập hiệu suất
- 11. GtkTreeXem hình phạt hiệu suất chèn/cập nhật do sắp xếp
- 12. Hiệu suất dấu phẩy động 32 bit so với 64 bit
- 13. C++: Có an toàn khi so sánh số nguyên 64 bit với số nguyên 32 bit không?
- 14. Truy cập một mảng có số âm!
- 15. PostgreSQL: Hình phạt hiệu suất khi tham gia hai bảng trong các lược đồ riêng biệt
- 16. Elixir - là có một hình phạt hiệu suất sử dụng nó thay vì erlang đồng bằng?
- 17. Hiệu suất phạt khi gọi một CUDA kernel
- 18. nguyên tử trong 32/64 bit
- 19. Ứng dụng 32 bit có thể truy cập cơ sở dữ liệu máy chủ 64 bit sql không?
- 20. Tại sao ứng dụng 32 bit của tôi không truy cập vào tổ chức đăng ký 32 bit?
- 21. Có bất kỳ hình phạt về hiệu suất nào khi sử dụng nhiều phiên bản CLLocationManager
- 22. Hiệu suất mảng PHP
- 23. Tìm vị trí bit trong số nguyên 32 bit chưa ký
- 24. Cách tổng hợp một mảng các số nguyên trong C#
- 25. Tôi có thể thay đổi macro này thành hàm nội tuyến mà không có lần truy cập hiệu suất không?
- 26. Tìm số nguyên 32 bit bị thiếu trong một mảng chưa phân loại chứa tối đa 4 tỷ ints
- 27. Hình phạt hiệu suất giao tiếp Cross AppDomain tối thiểu là gì?
- 28. Khả năng truy cập Java 32 bit trên máy 64 bit
- 29. Liên kết EXE 64 bit có thể chống lại các DLL 32 bit không?
- 30. Truy cập các bit trong một char trong C
Nếu bạn muốn số nguyên cố định chiều rộng cố gắng: 'int32_t' trong' ' –
Mysticial
' int' là kiểu tự nhiên cho kiến trúc. Trừ khi bạn có một lý do tốt để sử dụng một loại khác nhau, không. –
@PeteBecker Không phải vậy. 'int' vẫn chỉ 32 bit trên hầu hết các hệ thống hiện nay. – Mysticial