나는 초보자이다. git의 소스 코드를 읽는 동안, 나는이 래퍼 함수가 malloc
인 것을 발견했다.Wrapping malloc - C
void *xmalloc(size_t size)
{
void *ret = malloc(size);
if (!ret && !size)
ret = malloc(1);
if (!ret) {
release_pack_memory(size, -1);
ret = malloc(size);
if (!ret && !size)
ret = malloc(1);
if (!ret)
die("Out of memory, malloc failed");
}
#ifdef XMALLOC_POISON
memset(ret, 0xA5, size);
#endif
return ret;
}
질문
- 이해 할 수없는 이유를 그들이 사용하는
malloc(1)
? release_pack_memory
은 무엇을합니까? 전체 소스 코드에서이 기능 구현을 찾을 수 없습니다.#ifdef XMALLOC_POISON memset(ret, 0xA5, size);
의 기능은 무엇입니까?
내 프로젝트에서이 기능을 재사용 할 계획입니다. 이 포장재는 malloc
주위에 좋은 포장지입니까?
도움이 될 것입니다.
이 표준은 malloc(0)
의 동작을 정의하지 않습니다 : 질문 1에 대한
명예의 메모리 래퍼의 좋은 세트가 있습니다 - 내가 더 많은 개발자가 않았다 바랍니다. – Lars
질문 2 : 그 정의는 sha1_file.c에있다. (메모리는 git의 pack 객체와 관련이있다.) 프로토 타입은 git-compat-util.h에있다. (힌트 : git의 소스 코드를 살펴 본다면'git grep release_pack_memory'를 사용하십시오!) – Cascabel
@Lars : 고마워요. @ Jefromi :'git grep'에 대한 좋은 지적. –