Chi phí của malloc(), xét về chu kỳ CPU? (Vista/OS, phiên bản mới nhất của gcc, mức tối ưu hóa cao nhất, ...)chu kỳ CPU malloc
Về cơ bản, tôi đang triển khai cấu trúc DAG phức tạp (tương tự như danh sách được liên kết) bao gồm một số 16B (ít phổ biến hơn) 20B nút (phổ biến hơn).
Thỉnh thoảng, tôi sẽ phải xóa một số nút và sau đó thêm một số nút. Nhưng, thay vì luôn sử dụng malloc() và free(), tôi có thể chỉ cần di chuyển các nút không cần thiết đến cuối cấu trúc dữ liệu của mình, sau đó cập nhật các trường khi thuật toán của tôi tiếp tục. Nếu một nút miễn phí có sẵn, tôi sẽ cập nhật các trường; nếu không, tôi sẽ phải phân bổ một cái mới.
Vấn đề là, tôi có thể chỉ có một nút miễn phí có sẵn trong khi có để nhập, ví dụ, 20 nút giá trị của dữ liệu. Điều này có nghĩa:
- tôi sẽ kiểm tra đối với một nút miễn phí có sẵn
- Vui lòng cung sẽ thành công, và rằng nút miễn phí sẽ được cập nhật
- tôi sẽ kiểm tra đối với một nút có sẵn 19 lần trở lên
- Tất cả các kiểm tra sẽ không thành công và malloc() sẽ được gọi mỗi lần
Câu hỏi: Có thực sự đáng giá không? Tôi có nên chỉ malloc() và miễn phí() như bình thường, hoặc là nó có giá trị nó để giữ một số nút miễn phí có sẵn ở cuối danh sách, và tiếp tục kiểm tra ngay cả khi nó thường sẽ thất bại và dẫn đến malloc() anyway?
Cụ thể hơn,
chi phí CPU của malloc là gì() ??
Tại sao không phải lúc nào cũng phân bổ, hãy nói 20 nút mới mỗi lần bạn hết các nút miễn phí và để lại 19 nút còn lại chưa sử dụng như là các số miễn phí? –
Nếu bạn đang thực sự lo lắng về chi phí trên malloc, mà thường không phải là một vấn đề IMO, hãy thử VirtualAlloc http://msdn.microsoft.com/en-us/library/ms918445.aspx Không có một câu trả lời chung cho câu hỏi chu kỳ cpu bạn hỏi. Có biến chứng nền tảng. Nếu bạn phải biết, bạn có thể sẽ phải gọi QueryPerformanceCounter http://msdn.microsoft.com/en-us/library/ms644904(v=VS.85).aspx để thời gian của bạn malloc-ing –
Huh, là bạn nghiêm túc về VirtualAlloc? Nó làm tròn lên tất cả các phân bổ lên đến kích thước trang (4kB). Vì vậy, mỗi lần anh ta yêu cầu 20B, 4kB sẽ được phân bổ hiệu quả. Ngoài ra, VirtualAlloc phải bẫy vào chế độ hạt nhân, và do đó có thể chậm hơn nhiều so với malloc. – zvrba