SNU-ARC / 2024_spring_sysprog_Lab3

8 stars 0 forks source link

malloc, realloc의 인자로 negative size가 들어온 경우 #33

Open m-joon-ixix opened 2 months ago

m-joon-ixix commented 2 months ago

제목의 경우에 처리를 어떻게 하면 될까요? malloc의 경우 다음과 같이 처리된다고 하는데, mm_malloc(+ mm_realloc) 에서도 동일하게 동작하게 해야 할까요?

if you pass a negative value to malloc,
The negative value is converted to an unsigned value of type size_t which leads to a huge positive value.

아니면, size = 0 일때 memory를 allocate하지 않고 NULL을 리턴해도 된다고 답변 주셨는데, size < 0일 때도 마찬가지로 처리하면 되려나요?

m-joon-ixix commented 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.
-------------------------------------------------------------------------------------------------
col000 commented 2 months ago

memory 할당에 음수는 허용되지 않기에 size_t 타입으로 받게 되어 있습니다. reference mm_test에서는 min block alignment로 인해 allocate되는 것처럼 보일뿐 정상적인 입력은 아닙니다.

m-joon-ixix commented 2 months ago

@col000 음수를 할당하는 것이 정상적인 입력은 아니지만, 그럼에도 음수를 입력했을 때 malloc 함수가 어떻게든 동작은 하기 때문에, mm_malloc에서는 "이러한 음수 입력에 대한 처리를 어떻게 하면 되는지" (어떻게 처리하는게 정답인지) 질문을 드린 것입니다. 조금만 더 명확하게 답을 주시면 대단히 감사하겠습니다.

col000 commented 2 months ago

위에서 말씀드린 바와 같이 고려 대상이 아니기에 해당 조건에 대한 처리는 자유롭게 구현하시면 되십니다.

Prown0 commented 2 months ago

size_t 자료형 자체가 unsigned integer type이라 void *mm_malloc(size_t size) 호출 시에 size가 음수인 경우에는 자동으로 형변환되어 들어올 것으로 보입니다.

col000 commented 2 months ago

말씀하신대로 size_t 타입에 음수 입력시 size_t 범위에서 가장 큰 양수를 받아 overflow가 발생합니다. 그렇기에 malloc에서의 음수입력은 고려대상이 아닙니다.