Open m-joon-ixix opened 2 months ago
reference impl에서는 size가 0일때, 음수일때 모두 최소 단위 (32byte) 블록이 allocate 되고 있습니다. 이 동작을 따라하기에는 뭔가 이상한것 같아서 문의드립니다.
Your selection: m
(1) enter payload size(s) to malloc: 0
allocating 0 bytes
-----------------------------------
Your selection: m
(1) enter payload size(s) to malloc: -1
allocating 18446744073709551615 bytes
----------------------------------------- mm_check ----------------------------------------------
ds_heap_start: 0x7f47b02b9000
ds_heap_brk: 0x7f47b02c9000
heap_start: 0x7f47b02b9020
heap_end: 0x7f47b02c8fe0
free list policy: Implicit
initial sentinel: 0x7f47b02b9018: size: 0 ( 0), status: allocated
end sentinel: 0x7f47b02c8fe0: size: 0 ( 0), status: allocated
address offset size (hex) size (dec) payload status
0x7f47b02b9020 0x0 0x20 32 16 allocated
0x7f47b02b9040 0x20 0x20 32 16 allocated
0x7f47b02b9060 0x40 0xff80 65408 65392 free
Block structure coherent.
-------------------------------------------------------------------------------------------------
memory 할당에 음수는 허용되지 않기에 size_t 타입으로 받게 되어 있습니다. reference mm_test에서는 min block alignment로 인해 allocate되는 것처럼 보일뿐 정상적인 입력은 아닙니다.
@col000 음수를 할당하는 것이 정상적인 입력은 아니지만, 그럼에도 음수를 입력했을 때 malloc 함수가 어떻게든 동작은 하기 때문에, mm_malloc에서는 "이러한 음수 입력에 대한 처리를 어떻게 하면 되는지" (어떻게 처리하는게 정답인지) 질문을 드린 것입니다. 조금만 더 명확하게 답을 주시면 대단히 감사하겠습니다.
위에서 말씀드린 바와 같이 고려 대상이 아니기에 해당 조건에 대한 처리는 자유롭게 구현하시면 되십니다.
size_t
자료형 자체가 unsigned integer type이라 void *mm_malloc(size_t size)
호출 시에 size
가 음수인 경우에는 자동으로 형변환되어 들어올 것으로 보입니다.
말씀하신대로 size_t 타입에 음수 입력시 size_t 범위에서 가장 큰 양수를 받아 overflow가 발생합니다. 그렇기에 malloc에서의 음수입력은 고려대상이 아닙니다.
제목의 경우에 처리를 어떻게 하면 될까요?
malloc
의 경우 다음과 같이 처리된다고 하는데,mm_malloc
(+mm_realloc
) 에서도 동일하게 동작하게 해야 할까요?아니면,
size = 0
일때 memory를 allocate하지 않고 NULL을 리턴해도 된다고 답변 주셨는데,size < 0
일 때도 마찬가지로 처리하면 되려나요?