Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
m-joon-ixix opened this issue Apr 27, 2024 · 6 comments
Open

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

m-joon-ixix opened this issue Apr 27, 2024 · 6 comments

Comments

@m-joon-ixix
Copy link

제목의 경우에 처리를 어떻게 하면 될까요?
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
Copy link
Author

m-joon-ixix commented Apr 27, 2024

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
Copy link

col000 commented Apr 27, 2024

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

@m-joon-ixix
Copy link
Author

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

@col000
Copy link

col000 commented Apr 27, 2024

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

@Prown0
Copy link

Prown0 commented Apr 27, 2024

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

@col000
Copy link

col000 commented Apr 27, 2024

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

3 participants