Rework object refs tracking to reduce memory usage
Store pointers to referenced objects in a variable sized array instead of linked list. This cuts down memory usage of utilities which use object references; e.g., git-fsck-objects --full on the git.git repository consumes about 2 MB of memory tracked by Massif instead of 7 MB before the change. Object refs are still the biggest consumer of memory (57%), but the malloc overhead for a single block instead of a linked list is substantially smaller. Signed-off-by: Sergey Vlasov <vsu@altlinux.ru> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
committed by
Junio C Hamano
parent
545f229a4b
commit
4a4e6fd74f
10
object.h
10
object.h
@ -7,13 +7,18 @@ struct object_list {
|
||||
const char *name;
|
||||
};
|
||||
|
||||
struct object_refs {
|
||||
unsigned count;
|
||||
struct object *ref[0];
|
||||
};
|
||||
|
||||
struct object {
|
||||
unsigned parsed : 1;
|
||||
unsigned used : 1;
|
||||
unsigned int flags;
|
||||
unsigned char sha1[20];
|
||||
const char *type;
|
||||
struct object_list *refs;
|
||||
struct object_refs *refs;
|
||||
void *util;
|
||||
};
|
||||
|
||||
@ -35,7 +40,8 @@ struct object *parse_object(const unsigned char *sha1);
|
||||
/** Returns the object, with potentially excess memory allocated. **/
|
||||
struct object *lookup_unknown_object(const unsigned char *sha1);
|
||||
|
||||
void add_ref(struct object *refer, struct object *target);
|
||||
struct object_refs *alloc_object_refs(unsigned count);
|
||||
void set_object_refs(struct object *obj, struct object_refs *refs);
|
||||
|
||||
void mark_reachable(struct object *obj, unsigned int mask);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user