Khi đọc về memmove, tôi đọc rằng nó có thể xử lý MEMORY OVERLAPS nhưng tôi không thể biết cách chồng chéo có thể xảy ra giữa hai chuỗi và cách chức năng này vẫn sao chép chính xác khối bộ nhớ.Sự chồng chéo bộ nhớ xảy ra như thế nào và nó được kiểm soát như thế nào?
Trả lời
"Chồng chéo bộ nhớ" không tự xảy ra. Chính bạn là người có thể cung cấp chức năng memmove
với các vùng bộ nhớ chồng lên nhau. Đưa hai con trỏ vào cùng một mảng và bạn có thể dễ dàng kết thúc với các vùng bộ nhớ trùng lặp.
Tất nhiên, bạn cũng có thể dễ dàng tạo các đối tượng chồng chéo thông qua các công đoàn.
Không rõ ý bạn là gì bởi phần thứ hai của câu hỏi ("cách chức năng này vẫn sao chép chính xác khối bộ nhớ"). Bạn thấy vấn đề ở đâu?
memmove(p+1, p, 42);
Yêu cầu di chuyển byte bắt đầu từ cuối. Memcpy() làm cho một mớ hỗn độn của nó.
Nói đúng, 'memcpy' có hành vi không xác định nếu được sử dụng theo cách này. Nó có thể hình dung được, ví dụ nếu nó được viết giả sử sao chép ngược nhanh hơn, hoặc nếu 'memcpy' được thực hiện như một lời gọi đến' memmove', nhưng bạn không nên dựa vào những thứ như thế. :-) –
tại sao một người sẽ sử dụng memcpy nếu anh ấy biết memmove;) –
Vì memcpy() nhanh hơn. –
- 1. Trên nền tảng nào sự cố này sẽ xảy ra và tôi có thể cải thiện nó như thế nào?
- 2. Bộ nhớ CUDA được quản lý như thế nào?
- 3. Bộ nhớ memory_order_seq_cst và memory_order_acq_rel khác nhau như thế nào?
- 4. Thẻ meta viewport được sử dụng như thế nào và nó hoạt động như thế nào?
- 5. Bộ nhớ mã được quản lý như thế nào?
- 6. Id kiểm soát GUI của Windows được tạo ra như thế nào?
- 7. hình chữ nhật như thế nào để có được chồng chéo phối
- 8. Lịch sử kiểm soát phiên bản được lưu trữ và tính toán như thế nào?
- 9. kiểm soát phiên bản hoạt động như thế nào?
- 10. Bộ nhớ cache Gmap.net hoạt động như thế nào?
- 11. kiểm soát phiên bản monodevelop hoạt động như thế nào?
- 12. Mercurial xếp chồng lên GIT và SVN như thế nào?
- 13. aspx.designer.cs nó hoạt động như thế nào?
- 14. Ptr_vector quản lý bộ nhớ như thế nào?
- 15. LINQ - nó hoạt động như thế nào?
- 16. Tôi nên kiểm tra bộ tạo mã như thế nào?
- 17. WPF: Làm thế nào để vượt qua toàn bộ kiểm soát như CommandParameter thông qua XAML?
- 18. Bộ lập lịch hệ điều hành lấy lại quyền kiểm soát CPU như thế nào?
- 19. Bộ nhớ Zend_Auth hoạt động như thế nào?
- 20. Enum phân bổ bộ nhớ trên C như thế nào?
- 21. đám mây từ d3 - quá nhiều chồng chéo xảy ra
- 22. Bộ nhớ Cache ASP.NET hoạt động như thế nào?
- 23. Bộ nhớ đệm chuẩn bị sẵn sàng - nó có nghĩa là gì (nó hoạt động như thế nào)
- 24. Nhanh như thế nào là một khóa không được kiểm soát?
- 25. strlen: nó hoạt động như thế nào?
- 26. NSTableCellViews phải được đặt ra như thế nào?
- 27. như thế nào một chương trình chạy trong bộ nhớ và cách bộ nhớ được xử lý bởi hệ thống
- 28. Google Chrome kiểm soát/chứa nhiều quy trình như thế nào?
- 29. Thử nghiệm Acid được tạo ra như thế nào?
- 30. Quy trình xử lý được xác định như thế nào?
Tôi không nhận được làm thế nào một chức năng xử lý vấn đề chồng chéo bộ nhớ –
Nó hoạt động như thể nguồn được sao chép vào bộ đệm khác, sau đó được sao chép đến đích. Memcpy() sao chép nguồn đến đích trực tiếp. – Jefferson