mirror of
https://github.com/NixOS/nix.git
synced 2025-11-15 23:12:44 +01:00
Size -> size_t
This commit is contained in:
parent
ba36d43d46
commit
35b76b21ee
5 changed files with 26 additions and 27 deletions
|
|
@ -93,12 +93,12 @@ public:
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
Size words() const
|
size_t words() const
|
||||||
{
|
{
|
||||||
return wordsFor(capacity());
|
return wordsFor(capacity());
|
||||||
}
|
}
|
||||||
|
|
||||||
static Size wordsFor(size_t capacity)
|
static size_t wordsFor(size_t capacity)
|
||||||
{
|
{
|
||||||
return 2 + 3 * capacity; // FIXME
|
return 2 + 3 * capacity; // FIXME
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -70,12 +70,12 @@ public:
|
||||||
return getMisc() & 0xffff;
|
return getMisc() & 0xffff;
|
||||||
}
|
}
|
||||||
|
|
||||||
Size words() const
|
size_t words() const
|
||||||
{
|
{
|
||||||
return wordsFor(getSize());
|
return wordsFor(getSize());
|
||||||
}
|
}
|
||||||
|
|
||||||
static Size wordsFor(unsigned short size)
|
static size_t wordsFor(unsigned short size)
|
||||||
{
|
{
|
||||||
return 2 + size;
|
return 2 + size;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -239,8 +239,8 @@ void GC::gc()
|
||||||
|
|
||||||
// Go through all the arenas and add free objects to the
|
// Go through all the arenas and add free objects to the
|
||||||
// appropriate freelists.
|
// appropriate freelists.
|
||||||
Size totalObjectsFreed = 0;
|
size_t totalObjectsFreed = 0;
|
||||||
Size totalWordsFreed = 0;
|
size_t totalWordsFreed = 0;
|
||||||
|
|
||||||
for (auto & arena : arenas) {
|
for (auto & arena : arenas) {
|
||||||
auto [objectsFreed, wordsFreed] = freeUnmarked(arena);
|
auto [objectsFreed, wordsFreed] = freeUnmarked(arena);
|
||||||
|
|
@ -252,10 +252,10 @@ void GC::gc()
|
||||||
totalWordsFreed * WORD_SIZE, totalObjectsFreed, marked);
|
totalWordsFreed * WORD_SIZE, totalObjectsFreed, marked);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<Size, Size> GC::freeUnmarked(Arena & arena)
|
std::pair<size_t, size_t> GC::freeUnmarked(Arena & arena)
|
||||||
{
|
{
|
||||||
Size objectsFreed = 0;
|
size_t objectsFreed = 0;
|
||||||
Size wordsFreed = 0;
|
size_t wordsFreed = 0;
|
||||||
|
|
||||||
auto end = arena.start + arena.size;
|
auto end = arena.start + arena.size;
|
||||||
auto pos = arena.start;
|
auto pos = arena.start;
|
||||||
|
|
@ -272,7 +272,7 @@ std::pair<Size, Size> GC::freeUnmarked(Arena & arena)
|
||||||
auto obj = (Object *) pos;
|
auto obj = (Object *) pos;
|
||||||
auto tag = obj->type;
|
auto tag = obj->type;
|
||||||
|
|
||||||
Size objSize;
|
size_t objSize;
|
||||||
if (tag >= tInt && tag <= tFloat) {
|
if (tag >= tInt && tag <= tFloat) {
|
||||||
objSize = ((Value *) obj)->words();
|
objSize = ((Value *) obj)->words();
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -326,7 +326,7 @@ std::pair<Size, Size> GC::freeUnmarked(Arena & arena)
|
||||||
} else {
|
} else {
|
||||||
//debug("FREE OBJECT %x %d %d", obj, obj->type, objSize);
|
//debug("FREE OBJECT %x %d %d", obj, obj->type, objSize);
|
||||||
#if GC_DEBUG
|
#if GC_DEBUG
|
||||||
for (Size i = 0; i < objSize; ++i)
|
for (size_t i = 0; i < objSize; ++i)
|
||||||
((Word *) obj)[i] = 0xdeadc0dedeadbeefULL;
|
((Word *) obj)[i] = 0xdeadc0dedeadbeefULL;
|
||||||
#endif
|
#endif
|
||||||
objectsFreed += 1;
|
objectsFreed += 1;
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,6 @@
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
typedef unsigned long Word;
|
typedef unsigned long Word;
|
||||||
typedef size_t Size; // size in words
|
|
||||||
|
|
||||||
enum Tag {
|
enum Tag {
|
||||||
tFree = 3,
|
tFree = 3,
|
||||||
|
|
@ -103,27 +102,27 @@ struct PtrList : Object
|
||||||
{
|
{
|
||||||
T * elems[0];
|
T * elems[0];
|
||||||
|
|
||||||
PtrList(Tag type, Size size) : Object(type, size)
|
PtrList(Tag type, size_t size) : Object(type, size)
|
||||||
{
|
{
|
||||||
for (Size i = 0; i < size; i++)
|
for (size_t i = 0; i < size; i++)
|
||||||
elems[i] = nullptr;
|
elems[i] = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
Size size() const { return getMisc(); }
|
size_t size() const { return getMisc(); }
|
||||||
Size words() const { return wordsFor(size()); }
|
size_t words() const { return wordsFor(size()); }
|
||||||
static Size wordsFor(Size size) { return 1 + size; }
|
static size_t wordsFor(size_t size) { return 1 + size; }
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Free : Object
|
struct Free : Object
|
||||||
{
|
{
|
||||||
Free * next;
|
Free * next;
|
||||||
|
|
||||||
Free(Size size) : Object(tFree, size), next(nullptr) { }
|
Free(size_t size) : Object(tFree, size), next(nullptr) { }
|
||||||
|
|
||||||
// return size in words
|
// return size in words
|
||||||
Size words() const { return getMisc(); }
|
size_t words() const { return getMisc(); }
|
||||||
|
|
||||||
void setSize(Size size) { assert(size >= 1); setMisc(size); }
|
void setSize(size_t size) { assert(size >= 1); setMisc(size); }
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
|
|
@ -151,10 +150,10 @@ private:
|
||||||
|
|
||||||
struct Arena
|
struct Arena
|
||||||
{
|
{
|
||||||
Size size; // in words
|
size_t size; // in words
|
||||||
Word * start;
|
Word * start;
|
||||||
|
|
||||||
Arena(Size size)
|
Arena(size_t size)
|
||||||
: size(size)
|
: size(size)
|
||||||
, start(new Word[size])
|
, start(new Word[size])
|
||||||
{
|
{
|
||||||
|
|
@ -183,13 +182,13 @@ private:
|
||||||
|
|
||||||
struct FreeList
|
struct FreeList
|
||||||
{
|
{
|
||||||
Size minSize;
|
size_t minSize;
|
||||||
Free * front = nullptr;
|
Free * front = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
std::array<FreeList, 8> freeLists;
|
std::array<FreeList, 8> freeLists;
|
||||||
|
|
||||||
Object * allocObject(Size size)
|
Object * allocObject(size_t size)
|
||||||
{
|
{
|
||||||
assert(size >= 2);
|
assert(size >= 2);
|
||||||
|
|
||||||
|
|
@ -253,7 +252,7 @@ public:
|
||||||
~GC();
|
~GC();
|
||||||
|
|
||||||
template<typename T, typename... Args>
|
template<typename T, typename... Args>
|
||||||
Ptr<T> alloc(Size size, const Args & ... args)
|
Ptr<T> alloc(size_t size, const Args & ... args)
|
||||||
{
|
{
|
||||||
auto raw = allocObject(size);
|
auto raw = allocObject(size);
|
||||||
return new (raw) T(args...);
|
return new (raw) T(args...);
|
||||||
|
|
@ -279,7 +278,7 @@ private:
|
||||||
|
|
||||||
void addToFreeList(Free * obj);
|
void addToFreeList(Free * obj);
|
||||||
|
|
||||||
std::pair<Size, Size> freeUnmarked(Arena & arena);
|
std::pair<size_t, size_t> freeUnmarked(Arena & arena);
|
||||||
};
|
};
|
||||||
|
|
||||||
extern GC gc;
|
extern GC gc;
|
||||||
|
|
|
||||||
|
|
@ -169,7 +169,7 @@ public:
|
||||||
return type == tList0 ? 0 : type == tList1 ? 1 : type == tList2 ? 2 : bigList->size();
|
return type == tList0 ? 0 : type == tList1 ? 1 : type == tList2 ? 2 : bigList->size();
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr static Size words() { return 3; } // FIXME
|
constexpr static size_t words() { return 3; } // FIXME
|
||||||
|
|
||||||
void setContext(const PathSet & context)
|
void setContext(const PathSet & context)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue