Sau khi thực hiện thao tác toán học, giả sử nhân hai số nguyên, có thể truy cập đăng ký cờ tràn trong CPU với C++ không? Nếu không phải là những cách nhanh khác để kiểm tra tình trạng tràn là gì?Có thể truy cập đăng ký cờ tràn trong CPU với C++ không?
Trả lời
Không, nói chung là không thể. Một số CPU thậm chí không có cờ như vậy (ví dụ: MIPS).
link được cung cấp trong một trong các nhận xét sẽ cung cấp cho bạn các ý tưởng về cách bạn có thể thực hiện kiểm tra tràn.
Hãy nhớ rằng trong C và C++ đã ký số nguyên tràn gây ra hành vi không xác định và hợp pháp bạn không thể thực hiện kiểm tra tràn sau khi thực tế. Bạn cần phải sử dụng số học chưa ký hoặc thực hiện kiểm tra trước khi thực hiện phép tính số học.
Tôi khuyên bạn nên đọc sách này trong mọi trường hợp thích hợp. Từ Optimizing software in C++ -
Lỗi tràn là một vấn đề bảo mật khác. Tiêu chuẩn C chính thức nói rằng hành vi của các số nguyên đã ký trong trường hợp tràn là "không xác định". Điều này cho phép trình biên dịch bỏ qua tràn hoặc giả định rằng nó không xảy ra. Trong trường hợp của trình biên dịch Gnu, giả định rằng tràn số nguyên đã ký không xảy ra có kết quả không may là rằng nó cho phép trình biên dịch tối ưu hóa việc kiểm tra quá tải . Có một số biện pháp khắc phục có thể xảy ra đối với vấn đề này: (1) kiểm tra tràn trước khi xảy ra, (2) sử dụng số nguyên không dấu - chúng được đảm bảo quấn quanh, (3) số nguyên bẫy tràn với tùy chọn
-ftrapv
, nhưng điều này cực kỳ không hiệu quả, (4) nhận được cảnh báo trình biên dịch để tối ưu hóa như vậy với tùy chọn-Wstrict-overflow=2
hoặc (5) làm cho hành vi tràn được xác định rõ ràng với tùy chọn .
Đây có lẽ không phải những gì bạn muốn làm vì hai lý do:
- không phải mọi CPU có một lá cờ tràn
- sử dụng C++ có thực sự là không có cách nào để truy cập vào cờ tràn
mẹo kiểm tra tràn mà mọi người đã đăng trước đây có thể hữu ích.
nếu bạn thực sự muốn viết rất nhanh mã nhân hai số nguyên và kiểm tra cờ tràn, bạn sẽ phải sử dụng assembly. nếu bạn muốn một số ví dụ cho x86, thì hãy yêu cầu
- 1. C++ CPU Đăng ký sử dụng
- 2. Cách dễ dàng để truy cập sổ đăng ký I/O CPU Intel trong Windows
- 3. Truy cập Bảo mật Đăng ký bị từ chối. C#
- 4. hội - Thực cờ VS tràn cờ
- 5. Có hướng dẫn cpu thay đổi và sao chép có thể được truy cập từ C#?
- 6. Có thể đăng ký các đăng ký sự kiện trong C# không?
- 7. Bạn có thể truy cập sổ đăng ký từ các chức năng python trong vim
- 8. Theo dõi đăng ký, bao gồm truy cập đăng ký chế độ lõi?
- 9. Điều gì có thể truy cập/không thể truy cập có nghĩa là trong git?
- 10. Có thể truy xuất CPU đã tạo ra WDFREQUEST không?
- 11. nút đăng ký facebook cho "không thể đăng ký"
- 12. Truy cập đăng ký bằng C# và "BUILD x86" trên máy 64bit
- 13. đăng ký đối số gcc tràn trên x86-64
- 14. Đường ray: Không thể truy cập tệp nhật ký
- 15. Bạn có thể truy cập vào đăng ký nào mà không cần quản trị viên cấp quyền?
- 16. Đặt quyền truy cập cho thư mục - nhận ngoại lệ "Không thể đặt cờ"
- 17. Truy xuất đăng ký ARB với Authorize.Net API
- 18. Có thể đăng ký động các gói trong Symfony2 không?
- 19. Vô hiệu hóa quyền truy cập đăng ký cho quy trình cụ thể (WinAPI)
- 20. Làm thế nào tôi có thể truy cập Bộ đếm CPU Intel
- 21. Mã thông báo truy cập có thể dài hơn 255 ký tự không?
- 22. Có thể truy cập dữ liệu cũ trong CouchDB không?
- 23. Gửi Đơn đăng ký không thể
- 24. Postgresql. Có thể chạy truy vấn cập nhật trong paralell?
- 25. Phân bổ bộ nhớ tĩnh trong bộ nhớ cache CPU trong c/C++: có thể không?
- 26. truy cập biến đồng thời trong c
- 27. Có thể sử dụng các lớp .NET có thể nhìn thấy được với đăng ký COM miễn phí không?
- 28. Không thể truy cập thông tin Bảo mật mùa xuân trong một bài đăng đa truy cập servlet
- 29. C# cách đăng ký lắp ráp GAC không có GacUtil?
- 30. Đăng nhập Spring-Social mà không cần đăng ký
Kiểm tra http://stackoverflow.com/questions/199333/best-way-to-detect-integer-overflow-in-cc – acrilige
@acrilige thanks ,, rằng trả lời phần thứ hai của câu hỏi của tôi, bất kỳ ý tưởng nào về cách kiểm tra tràn sau SAU thực hiện các phép tính? –
Vì những lý do hiển nhiên, không thể truy cập trực tiếp vào thanh ghi cờ tràn theo cách tiêu chuẩn, di động. Tuy nhiên, bạn có thể xác định xem một hoạt động sẽ tràn với một công việc nhỏ hay không, và có nhiều cách để kiểm tra điều này hoặc phát hiện tràn trong một cách không theo tiêu chuẩn không di động. –