Tôi là người mới bắt đầu trong C. Trong khi đọc mã nguồn của git, tôi đã tìm thấy hàm bao bọc này quanh 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;
}
Câu hỏi
- Tôi không thể hiểu tại sao họ sử dụng
malloc(1)
? release_pack_memory
làm gì và tôi không thể tìm thấy triển khai chức năng này trong toàn bộ mã nguồn.#ifdef XMALLOC_POISON memset(ret, 0xA5, size);
là gì?
Tôi đang lên kế hoạch sử dụng lại chức năng này trong dự án của mình. Đây có phải là trình bao bọc tốt khoảng malloc
không?
Mọi trợ giúp đều tuyệt vời.
Kudo để đọc mã của các chương trình phức tạp hiện có - Tôi muốn nhiều nhà phát triển hơn đã làm điều đó. – Lars
Đối với câu hỏi 2: Định nghĩa của nó là trong sha1_file.c (nó cho bộ nhớ để làm với các đối tượng gói của git, có lẽ) và nguyên mẫu của nó là trong git-compat-util.h. (Gợi ý: miễn là bạn đang tìm kiếm mã nguồn của git, hãy sử dụng 'git grep release_pack_memory' để tìm nó!) – Cascabel
@Lars: Cảm ơn. @ Jefromi: Điểm tốt về 'git grep'. –