Sự khác nhau giữa hai loại là gì? Tôi biết rằng int32_t là chính xác 32 bit bất kể môi trường nhưng, như tên của nó cho thấy rằng nó nhanh, bao nhiêu nhanh hơn có thể int_fast32_t thực sự được so sánh với int32_t? Và nếu nó nhanh hơn đáng kể, thì tại sao vậy?Sự khác nhau giữa int32_t và int_fast32_t
Trả lời
C được xác định theo một máy trừu tượng hóa lý tưởng. Nhưng phần cứng trong thế giới thực có những đặc điểm hành vi không bị bắt bởi tiêu chuẩn ngôn ngữ. Các loại _fast
là loại bí danh cho phép mỗi nền tảng chỉ định các loại "thuận tiện" cho phần cứng. Ví dụ, nếu bạn có một mảng số nguyên 8 bit và muốn biến đổi từng số một, điều này sẽ không hiệu quả trên các máy tính để bàn hiện đại, vì các hoạt động tải của chúng thường muốn điền vào toàn bộ thanh ghi bộ xử lý. hoặc rộng 32 hoặc 64 bit (một "từ máy"). Vì vậy, rất nhiều dữ liệu được tải sẽ bị lãng phí, và quan trọng hơn, bạn không thể song song việc nạp và lưu trữ hai phần tử mảng lân cận, bởi vì chúng sống trong cùng một từ máy và do đó cần phải được tải-sửa đổi-lưu trữ tuần tự.
Các loại _fast
thường rộng bằng từ máy, nếu điều đó khả thi. Tức là, chúng có thể là rộng hơn so với nhu cầu của bạn và do đó tiêu thụ nhiều bộ nhớ hơn (và do đó khó nhớ hơn), nhưng phần cứng của bạn có thể truy cập chúng nhanh hơn. Tất cả phụ thuộc vào mẫu sử dụng, mặc dù. (Ví dụ: một mảng int_fast8_t
có lẽ sẽ là một mảng từ máy và vòng lặp chặt chẽ sửa đổi một mảng như vậy cũng có thể được hưởng lợi đáng kể.)
Cách duy nhất để tìm hiểu xem liệu có khác biệt gì không!
tại sao bạn lại nói về C++? –
@JensGustedt: Không có thói quen. Đã sửa! –
Bạn đã giải thích khá rõ. Cảm ơn :) –
int32_t
là một số nguyên chính xác là 32 bit. Nó rất hữu ích nếu bạn muốn ví dụ để tạo ra một cấu trúc với một vị trí bộ nhớ chính xác.
int_fast32_t
là số nguyên "nhanh nhất" cho bộ xử lý hiện tại của bạn lớn hơn hoặc bằng int32_t
. Tôi không biết nếu có thực sự là một lợi ích cho bộ xử lý hiện tại (x86 hoặc ARM)
Nhưng tôi có thể phác thảo cuối cùng một trường hợp thực tế: Tôi đã từng làm việc với bộ xử lý PowerPC 32 bit. Khi truy cập 16bits sai lệch int16_t
, nó không hiệu quả vì trước tiên phải sắp xếp lại chúng trong một trong số 32bits đăng ký của nó. Đối với dữ liệu không được ánh xạ bộ nhớ, vì chúng tôi không có giới hạn bộ nhớ, việc sử dụng int_fast16_t
hiệu quả hơn (thực tế là 32 bit int).
Tôi không nghĩ rằng câu trả lời đặt một điểm đáng chú ý trong báo giá Tiến sĩ Ác là rất hữu ích ... những gì "nhanh nhất" có nghĩa là *? –
@KerrekSB: Tiêu chuẩn chỉ nói "nhanh nhất", với chú thích "Loại được chỉ định không được đảm bảo nhanh nhất cho mọi mục đích, nếu việc triển khai không có cơ sở rõ ràng để chọn một loại khác, nó sẽ đơn giản chọn một số loại nguyên đáp ứng các yêu cầu về ký và chiều rộng . " Vì vậy, tôi nghĩ rằng các báo giá là khá thích hợp, vì mỗi người thực hiện tự do quyết định cho mình cách đo lường "tốc độ". 'int_fast32_t' có thể dễ dàng là 32 bit khi thực thi 64 bit. –
Xin lỗi, một cuộc họp đã gián đoạn việc viết câu trả lời của tôi. Nó bây giờ là hoàn thành với một - hy vọng - enlightening ví dụ. – Offirmo
- 1. Sự khác nhau giữa .Equals và ==
- 2. Sự khác nhau giữa% w và% W
- 3. Sự khác nhau giữa ParameterInfo.DefaultValue và ParameterInfo.RawDefaultValue
- 4. Sự khác nhau giữa MBean và MXBean
- 5. Sự khác nhau giữa ConfigurationManager và ConfigurationSettings
- 6. Sự khác nhau giữa Tkinter và Tkinter
- 7. Sự khác nhau giữa! = Và =! trong Java?
- 8. Sự khác nhau giữa 'SpecialFolder.LocalApplicationData' và 'SpecialFolder.ApplicationData'?
- 9. Sự khác nhau giữa String.getBytes() và IOUtils.toByteArray()?
- 10. Sự khác nhau giữa presentModalViewController và presentViewController?
- 11. Sự khác nhau giữa NSInvocationOperation và NSBlockOperation
- 12. Sự khác nhau giữa TVar và TMVar
- 13. Sự khác nhau giữa onClickListener và onItemClickListener
- 14. Sự khác nhau giữa `require` và` gem`
- 15. Sự khác nhau giữa HttpUtility.HtmlEncode và Server.HtmlEncode
- 16. Sự khác nhau giữa sqlplus và sqldeveloper?
- 17. Sự khác nhau giữa JPA và JPA2
- 18. Sự khác nhau giữa DECIMAL và NUMERIC
- 19. Sự khác nhau giữa "./somescript.sh" và ". ./somescript.sh"
- 20. Sự khác nhau giữa GIT và CVS
- 21. Sự khác nhau giữa System.Drawing.Point và System.Drawing.PointF
- 22. Sự khác nhau giữa REST và WebServices
- 23. Sự khác nhau giữa sys và os.sys
- 24. Sự khác nhau giữa select() và selectAll()
- 25. Sự khác nhau giữa restartLoader và onContentChanged
- 26. Sự khác nhau giữa dbcontext.Add và dbcontext.AddObject
- 27. Sự khác nhau giữa | và || trong MATLAB?
- 28. Có sự khác nhau giữa "và"
- 29. Sự khác nhau giữa `% trong%` và `== '
- 30. Sự khác nhau giữa R.layout và android.R.layout
Tốc độ nhanh hơn khoảng 50% đến 80%. Nó thực sự là một loại khá nhanh. Trong thực tế nó nhanh đến nỗi nó biến hầu hết các thuật toán O (N) thành O (N/2). –
'int_fast32_t' là loại số nguyên có dấu * nhanh nhất có sẵn với * ít nhất * 32 bit. – Maroun
@Kerrek, bạn thực sự nên đặt mặt cười ở phần cuối của sự hài hước vì một số linh hồn nghèo không nghi ngờ lấy nó như phúc âm :-) – paxdiablo