aboutsummaryrefslogtreecommitdiff
path: root/object.h
diff options
context:
space:
mode:
authorSergey Vlasov <vsu@altlinux.ru>2005-11-15 19:08:08 +0300
committerJunio C Hamano <junkio@cox.net>2005-11-15 11:42:29 -0800
commit4a4e6fd74f7d4564ed43eaaf59b6bd70c1959f1a (patch)
tree505862d83f5f0ffae0a2d024e7d0bfb336ddf560 /object.h
parent545f229a4b43212e683ac63e5aa740324ac7799e (diff)
downloadgit-4a4e6fd74f7d4564ed43eaaf59b6bd70c1959f1a.tar.gz
git-4a4e6fd74f7d4564ed43eaaf59b6bd70c1959f1a.tar.xz
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>
Diffstat (limited to 'object.h')
-rw-r--r--object.h10
1 files changed, 8 insertions, 2 deletions
diff --git a/object.h b/object.h
index 6accda33d..336d986b5 100644
--- a/object.h
+++ b/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);