Electrostat-Lab / Electrostat-Lab/jme-alloc

[Feature-Request] Buffer Partitioning Utility

Open
#39 0 comments 0 reactions 0 assignees View on GitHub
enhancement future-release question
Dominant language
Java
Stars
7
Forks
1
PR merge metrics
No merged PRs in 30d

Description

Provides an advanced buffer partitioning as a separate library.

For example:
```c
#include
#include

typedef struct {
void* start_address;
void* end_address;
size_t offset;
size_t size;
size_t pointer_location;

void (*invalidate)(void*);

} MemoryPartition;

static inline void invalidate(MemoryPartition* partition) {
partition->start_address += partition->offset;
partition->end_address = partition->start_address + partition->size;
partition->pointer_location = partition->offset + partition->size;
}

static inline MemoryPartition create(void* buffer, size_t offset, size_t size) {
MemoryPartition partition = {
buffer + offset,
(buffer + offset) + size,
offset,
size,
offset + size,
&invalidate
};

return partition;
}

int main() {
const size_t size = 4;
void* buffer = (void*) malloc(size * 3);
printf("Allocated buffer start address = %p\n", buffer);

const MemoryPartition partition0 = create(buffer, 0, size);
printf("Partition0 start address = %p\n", partition0.start_address);
printf("Partition0 end address = %p\n", partition0.end_address);

const MemoryPartition partition1 = create(buffer, partition0.pointer_location + 1, size);
printf("Partition1 start address = %p\n", partition1.start_address);
printf("Partition1 end address = %p\n", partition1.end_address);

const MemoryPartition partition2 = create(buffer, partition1.pointer_location + 1, size);
printf("Partition2 start address = %p\n", partition2.start_address);
printf("Partition2 end address = %p\n", partition2.end_address);

/* add some data to the partitions */
*((int*) partition0.start_address) = 44;
*((int*) partition1.start_address) = 55;
*((int*) partition2.start_address) = 255;

printf("%s\n", "ls part: Print partitions data: ");
printf("%i\n", *((int*) partition0.start_address));
printf("%i\n", *((int*) partition1.start_address));
printf("%i\n", *((int*) partition2.start_address));

return 0;
}
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.