동적 메모리 할당을위한 데이터 구조


12

셀 프로브 모델을 생각해보십시오. 임의의 길이의 연속 메모리 청크 (예 : C의 malloc)를 할당하고 메모리 세그먼트 화를 피하면서 해제 할 수있는 데이터 구조가 있습니까? n은 다음과 같은 최악의 결정적 O (log n) 시간에 모든 연산을 실행 메모리의 총 크기?

메모리 세분화를 피함으로써 총 자유 셀 수가 F이면 연속적인 F 셀 세그먼트 또는 약 F 셀을 할당 할 수 있어야합니다.

답변:


6

시간 제한이 없어도 압축 가비지 수집기와 같이 할당 된 개체를 이동할 수 없다면 "메모리 세분화를 피할 수 없습니다". 과 사이의 크기 블록에서 바이트 를 할당 하려면 바이트의 메모리가 필요 하다는 것을 보여주는 Robson의 "동적 저장 할당에 관한 일부 함수의 경계"를 참조하십시오 .mnNΩ(mlog(N/n))

또한, 버디 시스템은이 한계를 달성하고 로그 시간으로 수행 할 수 있습니다.


참조 주셔서 감사합니다. 할당 된 객체를 움직일 수 있습니다 (그렇지 않으면 나쁜 예를 생각해내는 것이 상당히 쉽습니다). 언급 한 하한이 여전히 적용됩니까?
Manu

내 지식이 아닙니다. malloc이 실제로 작동하는 방식과는 다르기 때문에 이에 대한 새로운 질문을 게시하고 싶을 수도 있습니다. 예를 들어 고려해야 할 한 가지 질문은 크기가 블록을 이동하는 작업에 시간 비용을 할당하는 문제입니다 . 이에 대한 내용은 Bender et al.의 "연속 객체 배열 유지 관리" 에서 읽을 수 있습니다 . m
jbapple

블록 이동 비용이 크기가 선형이고, malloc / free 호출 사이에 블록이 연속적이어야 하는 경우 최악의 경우 시간이 걸리는 알고리즘은 한번 큰 블록을 이동할 수 없습니다. 배치됩니다. 결과적으로, Robson에 의해 기술 된 것과 같은 패턴이 여전히 가능할 수 있으며, 따라서 초 선형 공간 사용을 강요한다. O(logn)
jbapple

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.