Skip to content
This repository has been archived by the owner on Apr 7, 2022. It is now read-only.

Commit

Permalink
change: Nom
Browse files Browse the repository at this point in the history
  • Loading branch information
RomainTHD committed Oct 10, 2020
1 parent 8f10895 commit 1970291
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 19 deletions.
12 changes: 6 additions & 6 deletions include/std/memory.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ namespace std::memory {
/**
* Segment RAM (liste chaînée)
*/
struct MemorySegment {
struct MemorySegmentHeader {
/**
* Taille
*/
Expand All @@ -19,22 +19,22 @@ namespace std::memory {
/**
* Segment suivant
*/
MemorySegment* nextSegment;
MemorySegmentHeader* nextSegment;

/**
* Segment précédent
*/
MemorySegment* prevSegment;
MemorySegmentHeader* prevSegment;

/**
* Segment libre suivant
*/
MemorySegment* nextFreeSegment;
MemorySegmentHeader* nextFreeSegment;

/**
* Segment libre précédent
*/
MemorySegment* prevFreeSegment;
MemorySegmentHeader* prevFreeSegment;

/**
* Segment libre ou non
Expand All @@ -53,7 +53,7 @@ namespace std::memory {
/**
* Alloue de la mémoire.
* On est honnêtement pas sur la meilleure implémentation qui existe,
* y a beaucoup de données inutiles pour des petites allocations à cause des infos sur les MemorySegment qu'on
* y a beaucoup de données inutiles pour des petites allocations à cause des infos sur les MemorySegmentHeader qu'on
* doit bien stocker quelque part, mais ça fait le taf c'est ce qui compte.
*
* @param size Taille
Expand Down
26 changes: 13 additions & 13 deletions src/std/memory.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ namespace std::memory {
* @param segA Segment A
* @param segB Segment B
*/
void combineFreeSegments(_Inout_ MemorySegment* segA, _Inout_ MemorySegment* segB) {
void combineFreeSegments(_Inout_ MemorySegmentHeader* segA, _Inout_ MemorySegmentHeader* segB) {
if (segA == nullptr) {
return;
}
Expand All @@ -22,7 +22,7 @@ namespace std::memory {
}

if (segA < segB) {
segA->length += segB->length + sizeof(MemorySegment);
segA->length += segB->length + sizeof(MemorySegmentHeader);
segA->nextSegment = segB->nextSegment;
segA->nextFreeSegment = segB->nextFreeSegment;

Expand All @@ -31,7 +31,7 @@ namespace std::memory {
segB->nextFreeSegment->prevFreeSegment = segA;
}
else {
segB->length += segA->length + sizeof(MemorySegment);
segB->length += segA->length + sizeof(MemorySegmentHeader);
segB->nextSegment = segA->nextSegment;
segB->nextFreeSegment = segA->nextFreeSegment;

Expand All @@ -44,7 +44,7 @@ namespace std::memory {
/**
* 1er segment
*/
MemorySegment* _firstFreeSegment;
MemorySegmentHeader* _firstFreeSegment;
}

/**
Expand All @@ -54,8 +54,8 @@ namespace std::memory {
* @param heapLength Taille du segment
*/
void initHeap(u64 heapAddress, u64 heapLength) {
_firstFreeSegment = (MemorySegment*) heapAddress;
_firstFreeSegment->length = heapLength - sizeof(MemorySegment);
_firstFreeSegment = (MemorySegmentHeader*) heapAddress;
_firstFreeSegment->length = heapLength - sizeof(MemorySegmentHeader);
_firstFreeSegment->nextSegment = nullptr;
_firstFreeSegment->prevSegment = nullptr;
_firstFreeSegment->nextFreeSegment = nullptr;
Expand All @@ -66,7 +66,7 @@ namespace std::memory {
/**
* Alloue de la mémoire.
* On est honnêtement pas sur la meilleure implémentation qui existe,
* y a beaucoup de données inutiles pour des petites allocations à cause des infos sur les MemorySegment qu'on
* y a beaucoup de données inutiles pour des petites allocations à cause des infos sur les MemorySegmentHeader qu'on
* doit bien stocker quelque part, mais ça fait le taf c'est ce qui compte.
*
* @param size Taille
Expand All @@ -83,25 +83,26 @@ namespace std::memory {
size += 8;
}

std::memory::MemorySegment* currentMemorySegment = std::memory::_firstFreeSegment;
std::memory::MemorySegmentHeader* currentMemorySegment = std::memory::_firstFreeSegment;

while (true) {
if (currentMemorySegment->length >= size) {
// On a trouvé un segment libre

if (currentMemorySegment->length != size) {
if (currentMemorySegment->length > size + sizeof(MemorySegmentHeader)) {
// On va split le segment pour n'allouer que ce qu'il faut

MemorySegment* newSegment = (MemorySegment*) ((u64) currentMemorySegment + sizeof(MemorySegment) + size);
MemorySegmentHeader* newSegment = (MemorySegmentHeader*) ((u64) currentMemorySegment + sizeof(MemorySegmentHeader) + size);
newSegment->isFree = true;
newSegment->length = (u64) currentMemorySegment->length - (sizeof(MemorySegment) + size);
newSegment->length = (u64) currentMemorySegment->length - (sizeof(MemorySegmentHeader) + size);
newSegment->nextSegment = currentMemorySegment->nextSegment;
newSegment->nextFreeSegment = currentMemorySegment->nextFreeSegment;
newSegment->prevSegment = currentMemorySegment;
newSegment->prevFreeSegment = currentMemorySegment->prevFreeSegment;

currentMemorySegment->nextFreeSegment = newSegment;
currentMemorySegment->nextSegment = newSegment;
currentMemorySegment->length = size;
}

if (currentMemorySegment == _firstFreeSegment) {
Expand All @@ -110,7 +111,6 @@ namespace std::memory {
}

currentMemorySegment->isFree = false;
currentMemorySegment->length = size;

if (currentMemorySegment->prevFreeSegment != nullptr) {
// Changement des segments libres de la liste chainée
Expand Down Expand Up @@ -204,7 +204,7 @@ namespace std::memory {
* @param ptr Pointeur
*/
void free(_Out_ void* ptr) {
MemorySegment* currentMemorySegment = ((MemorySegment*) ptr) - 1;
MemorySegmentHeader* currentMemorySegment = ((MemorySegmentHeader*) ptr) - 1;
currentMemorySegment->isFree = true;

if (currentMemorySegment < _firstFreeSegment) {
Expand Down

0 comments on commit 1970291

Please sign in to comment.