이 성공을 반환하는 동안 이 실패하는 시나리오가 있습니까? 내가 malloc(20)
과 calloc(4*5)
라고 가정하면 이 실패하고 calloc
이 성공할 수있는 시나리오가 존재합니까? 그렇다면 정확한 이유는 무엇입니까?calloc은 malloc이 실패 할 때 성공을 반환합니다.
1
A
답변
0
malloc()
이 실패하고 calloc()
이 성공할 수있는 유일한 이유는 일부 라이브러리 (또는 애플리케이션)가 다른 라이브러리보다 우선 적용되는 경우입니다.
분명히 이런 일이 발생하는 모든 libc
은 깨졌습니다.
+0
가능합니다. 나는 잘 모르겠다. malloc (20) 동안 시스템은 20 개의 연속 바이트를 찾을 수 없으므로 실패합니다. 그러나 calloc (4 * 5)는 4 개의 5 바이트 위치를 찾을 수 있으므로 calloc이 성공합니까 ?? –
+0
calloc (4, 5)는 4 개의 별도의 메모리 청크를 할당하지 않습니다. 그것은 단지 하나의 리턴 값을 가지며, 리턴 된 포인터는 각각 5 바이트의 4 개의 요소, 즉 적어도 20 바이트를 포함하는 단일 연속 버퍼를 저장할 수있는 버퍼를 가리킨다. –
나는 생각할 수 없다. 이것은 실제로 일어나는가? –
@Marcelo. 네, 시나리오가 있습니다. 그러나 나는 이것에 대한 이유를 찾지 못했습니다 –
나는 반대의 것을 상상할 수 있습니다 :'malloc()'이 성공하고'calloc()'이 _overcommitting_ ('man 3 malloc' _BUGS_ section) 때문에 SIGKILL로 현재 프로그램에 실패했습니다 OOM에서 프로그램을 죽이라. – Shi