From 392f5f5ee56679a05e045e54fd78a48677b4e06e Mon Sep 17 00:00:00 2001
From: codeboss <2422523675@qq.com>
Date: Sat, 27 Sep 2025 00:45:04 +0800
Subject: [PATCH 1/3] update
---
ECSMemoryPool/ECSMemoryPool.vcxproj | 1 +
ECSMemoryPool/ecs_memorypool.h | 6 +++---
ECSMemoryPool/memory_pages.cpp | 16 ++++++++--------
ECSMemoryPool/memory_pages.h | 8 ++++----
.../QtConsoleApplication1.vcxproj | 2 +-
5 files changed, 17 insertions(+), 16 deletions(-)
diff --git a/ECSMemoryPool/ECSMemoryPool.vcxproj b/ECSMemoryPool/ECSMemoryPool.vcxproj
index 4c64a7c..cc4e118 100644
--- a/ECSMemoryPool/ECSMemoryPool.vcxproj
+++ b/ECSMemoryPool/ECSMemoryPool.vcxproj
@@ -16,6 +16,7 @@
10.0
10.0
$(MSBuildProjectDirectory)\QtMsBuild
+ ECSChunkPool
diff --git a/ECSMemoryPool/ecs_memorypool.h b/ECSMemoryPool/ecs_memorypool.h
index 59e0fe2..ba43a97 100644
--- a/ECSMemoryPool/ecs_memorypool.h
+++ b/ECSMemoryPool/ecs_memorypool.h
@@ -82,13 +82,13 @@ public:
// 迭代内存页集合
for (auto page_ptr : page_list) {
- auto max_element_cnt = page_ptr->maxSliceCount();
+ auto max_element_cnt = page_ptr->maxChunkCapacity();
auto active_cnt = page_ptr->getActiveCount();
// 初级校核可用数量
if (active_cnt < max_element_cnt) {
// 逐个查找数据元素
for (auto eidx = 0; eidx < max_element_cnt; eidx++) {
- auto slice_ptr = page_ptr->getSlicePtr(eidx);
+ auto slice_ptr = page_ptr->getChunkPtr(eidx);
// 访问排他
slice_ptr->page_refer->lock();
// 裁决元素可用性
@@ -111,7 +111,7 @@ public:
// 生成新的内存页
auto new_page = new MemoryPage(MemoryElement::rawSize(T::typeSize()), type_code);
_storage_pages.insert(type_code, new_page);
- refer_ptr = new_page->getSlicePtr(0);
+ refer_ptr = new_page->getChunkPtr(0);
refer_ptr->page_refer->getActiveCount(1);
refer_ptr->refer_count++;
}
diff --git a/ECSMemoryPool/memory_pages.cpp b/ECSMemoryPool/memory_pages.cpp
index 4a31212..b12ef19 100644
--- a/ECSMemoryPool/memory_pages.cpp
+++ b/ECSMemoryPool/memory_pages.cpp
@@ -7,7 +7,7 @@ MemoryPage::MemoryPage(uint16_t element_size, uint64_t typecode)
pcb.typecode_of_element = typecode;
}
-uint16_t MemoryPage::dataSliceSize() const
+uint16_t MemoryPage::chunkSize() const
{
return pcb.byte_count_per_element - MemoryElement::data_buffer_offset;
}
@@ -39,9 +39,9 @@ std::pair MemoryPage::getRecords() const {
return std::make_pair(pcb.curr_access_usec, pcb.acc_count_per_cycle);
}
-ElementControlBlock* MemoryPage::getSlicePtr(int index) {
- auto member_cnt = maxSliceCount();
- auto element_size = sliceRawSize();
+ElementControlBlock* MemoryPage::getChunkPtr(int index) {
+ auto member_cnt = maxChunkCapacity();
+ auto element_size = chunkRawSize();
ElementControlBlock* element_ptr = nullptr;
if (index >= 0 && index < member_cnt) {
@@ -79,15 +79,15 @@ uint64_t MemoryPage::elementTypeCode() const
return pcb.typecode_of_element;
}
-uint16_t MemoryPage::sliceRawSize() const {
+uint16_t MemoryPage::chunkRawSize() const {
auto data_ptr = const_cast(this);
std::lock_guard g(data_ptr->pcb.access_protected);
return pcb.byte_count_per_element;
}
-uint16_t MemoryPage::maxSliceCount() const {
+uint16_t MemoryPage::maxChunkCapacity() const {
uint16_t cnt = sizeof(data_buffer);
- return cnt / this->sliceRawSize();
+ return cnt / this->chunkRawSize();
}
// element =================================================================
@@ -114,7 +114,7 @@ MemoryElement::MemoryElement(ElementControlBlock* access_bind)
uint16_t MemoryElement::typeSize() const
{
auto page_ptr = data_ptr->page_refer;
- return page_ptr->sliceRawSize();
+ return page_ptr->chunkRawSize();
}
void MemoryElement::accessUpdate(uint64_t time_usec)
diff --git a/ECSMemoryPool/memory_pages.h b/ECSMemoryPool/memory_pages.h
index 83d5960..153e276 100644
--- a/ECSMemoryPool/memory_pages.h
+++ b/ECSMemoryPool/memory_pages.h
@@ -55,7 +55,7 @@ public:
/// 内存存储的数据元素的尺寸
///
///
- uint16_t dataSliceSize() const;
+ uint16_t chunkSize() const;
///
/// 获取当前活跃元素数量
@@ -95,7 +95,7 @@ public:
/// 元素索引
/// 是否设置
/// 数据指针
- ElementControlBlock* getSlicePtr(int index);
+ ElementControlBlock* getChunkPtr(int index);
///
/// 元素类型码
///
@@ -105,12 +105,12 @@ public:
/// 获取单个元素尺寸
///
/// 字节数量
- uint16_t sliceRawSize() const;
+ uint16_t chunkRawSize() const;
///
/// 获取元素数量
///
///
- uint16_t maxSliceCount() const;
+ uint16_t maxChunkCapacity() const;
};
///
diff --git a/QtConsoleApplication1/QtConsoleApplication1.vcxproj b/QtConsoleApplication1/QtConsoleApplication1.vcxproj
index a2e13ef..c74f05e 100644
--- a/QtConsoleApplication1/QtConsoleApplication1.vcxproj
+++ b/QtConsoleApplication1/QtConsoleApplication1.vcxproj
@@ -70,7 +70,7 @@
stdcpp20
- ECSMemoryPool.lib;%(AdditionalDependencies)
+ ECSChunkPool.lib;%(AdditionalDependencies)
From 10e30c32b7c61b6f0b383393eefce795409ce4c7 Mon Sep 17 00:00:00 2001
From: codeboss <2422523675@qq.com>
Date: Sat, 27 Sep 2025 00:46:46 +0800
Subject: [PATCH 2/3] update
---
ECSMemoryPool/ecs_memorypool.h | 14 +++++++-------
ECSMemoryPool/memory_pages.cpp | 28 ++++++++++++++--------------
ECSMemoryPool/memory_pages.h | 6 +++---
3 files changed, 24 insertions(+), 24 deletions(-)
diff --git a/ECSMemoryPool/ecs_memorypool.h b/ECSMemoryPool/ecs_memorypool.h
index ba43a97..ba03ed7 100644
--- a/ECSMemoryPool/ecs_memorypool.h
+++ b/ECSMemoryPool/ecs_memorypool.h
@@ -18,17 +18,17 @@ concept CompenentType = requires(T t, T other, const QJsonObject & in, QJsonObje
/// 组件引用符号
///
///
-template class ComponentRefer : protected MemoryElement {
+template class ComponentRefer : protected MemoryChunk {
public:
- ComponentRefer(ElementControlBlock* data) : MemoryElement(data) { referAdd(); }
- ComponentRefer(const ComponentRefer &other) :MemoryElement(other.data_ptr) { referAdd(); }
+ ComponentRefer(ElementControlBlock* data) : MemoryChunk(data) { referAdd(); }
+ ComponentRefer(const ComponentRefer &other) :MemoryChunk(other.data_ptr) { referAdd(); }
virtual ~ComponentRefer() { referSub(); }
T* dataLock() {
- return (T*)(MemoryElement::dataLock());
+ return (T*)(MemoryChunk::dataLock());
}
void unlock() {
- MemoryElement::release();
+ MemoryChunk::release();
}
};
@@ -82,7 +82,7 @@ public:
// 迭代内存页集合
for (auto page_ptr : page_list) {
- auto max_element_cnt = page_ptr->maxChunkCapacity();
+ auto max_element_cnt = page_ptr->maxCapacity();
auto active_cnt = page_ptr->getActiveCount();
// 初级校核可用数量
if (active_cnt < max_element_cnt) {
@@ -109,7 +109,7 @@ public:
}
{
// 生成新的内存页
- auto new_page = new MemoryPage(MemoryElement::rawSize(T::typeSize()), type_code);
+ auto new_page = new MemoryPage(MemoryChunk::rawSize(T::typeSize()), type_code);
_storage_pages.insert(type_code, new_page);
refer_ptr = new_page->getChunkPtr(0);
refer_ptr->page_refer->getActiveCount(1);
diff --git a/ECSMemoryPool/memory_pages.cpp b/ECSMemoryPool/memory_pages.cpp
index b12ef19..4089810 100644
--- a/ECSMemoryPool/memory_pages.cpp
+++ b/ECSMemoryPool/memory_pages.cpp
@@ -9,7 +9,7 @@ MemoryPage::MemoryPage(uint16_t element_size, uint64_t typecode)
uint16_t MemoryPage::chunkSize() const
{
- return pcb.byte_count_per_element - MemoryElement::data_buffer_offset;
+ return pcb.byte_count_per_element - MemoryChunk::data_buffer_offset;
}
uint16_t MemoryPage::getActiveCount(uint16_t inc) const
@@ -40,7 +40,7 @@ std::pair MemoryPage::getRecords() const {
}
ElementControlBlock* MemoryPage::getChunkPtr(int index) {
- auto member_cnt = maxChunkCapacity();
+ auto member_cnt = maxCapacity();
auto element_size = chunkRawSize();
ElementControlBlock* element_ptr = nullptr;
@@ -85,22 +85,22 @@ uint16_t MemoryPage::chunkRawSize() const {
return pcb.byte_count_per_element;
}
-uint16_t MemoryPage::maxChunkCapacity() const {
+uint16_t MemoryPage::maxCapacity() const {
uint16_t cnt = sizeof(data_buffer);
return cnt / this->chunkRawSize();
}
// element =================================================================
-const uint32_t MemoryElement::data_buffer_offset = MemoryElement::validOffset();
+const uint32_t MemoryChunk::data_buffer_offset = MemoryChunk::validOffset();
-uint32_t MemoryElement::validOffset()
+uint32_t MemoryChunk::validOffset()
{
uint32_t remains = sizeof(ElementControlBlock) % 16;
uint32_t times = sizeof(ElementControlBlock) / 16;
return (remains ? times + 1 : times) * 16;
}
-uint32_t MemoryElement::rawSize(uint32_t data_type_size)
+uint32_t MemoryChunk::rawSize(uint32_t data_type_size)
{
uint32_t minimal_size = validOffset() + data_type_size;
auto remains = minimal_size % 16;
@@ -108,21 +108,21 @@ uint32_t MemoryElement::rawSize(uint32_t data_type_size)
return (remains ? times + 1 : times) * 16;
}
-MemoryElement::MemoryElement(ElementControlBlock* access_bind)
+MemoryChunk::MemoryChunk(ElementControlBlock* access_bind)
: data_ptr((ElementControlBlock*)access_bind) {}
-uint16_t MemoryElement::typeSize() const
+uint16_t MemoryChunk::typeSize() const
{
auto page_ptr = data_ptr->page_refer;
return page_ptr->chunkRawSize();
}
-void MemoryElement::accessUpdate(uint64_t time_usec)
+void MemoryChunk::accessUpdate(uint64_t time_usec)
{
data_ptr->page_refer->accessRecord(time_usec);
}
-bool MemoryElement::isActived(ElementControlBlock* refer)
+bool MemoryChunk::isActived(ElementControlBlock* refer)
{
refer->page_refer->lock();
auto mark = refer->refer_count;
@@ -130,27 +130,27 @@ bool MemoryElement::isActived(ElementControlBlock* refer)
return mark;
}
-void MemoryElement::referAdd()
+void MemoryChunk::referAdd()
{
data_ptr->page_refer->lock();
data_ptr->refer_count++;
data_ptr->page_refer->release();
}
-void MemoryElement::referSub()
+void MemoryChunk::referSub()
{
data_ptr->page_refer->lock();
data_ptr->refer_count--;
data_ptr->page_refer->release();
}
-unsigned char* MemoryElement::dataLock()
+unsigned char* MemoryChunk::dataLock()
{
data_ptr->page_refer->lock();
return ((unsigned char*)data_ptr) + data_buffer_offset;
}
-void MemoryElement::release()
+void MemoryChunk::release()
{
data_ptr->page_refer->release();
}
diff --git a/ECSMemoryPool/memory_pages.h b/ECSMemoryPool/memory_pages.h
index 153e276..1eea16a 100644
--- a/ECSMemoryPool/memory_pages.h
+++ b/ECSMemoryPool/memory_pages.h
@@ -110,13 +110,13 @@ public:
/// 获取元素数量
///
///
- uint16_t maxChunkCapacity() const;
+ uint16_t maxCapacity() const;
};
///
/// 内存元素访问接口
///
-class ECSMEMORYPOOL_EXPORT MemoryElement {
+class ECSMEMORYPOOL_EXPORT MemoryChunk {
protected:
ElementControlBlock* const data_ptr;
@@ -134,7 +134,7 @@ public:
/// 构建内存元素访问接口
///
///
- MemoryElement(ElementControlBlock* access_bind);
+ MemoryChunk(ElementControlBlock* access_bind);
///
/// 提取关联元素尺寸
From 8d1184212edefce8de24383f61c02c01a5552831 Mon Sep 17 00:00:00 2001
From: codeboss <2422523675@qq.com>
Date: Sat, 27 Sep 2025 22:22:43 +0800
Subject: [PATCH 3/3] update
---
ECSMemoryPool/ecs_memorypool.h | 12 ++++++------
ECSMemoryPool/memory_pages.h | 3 ---
2 files changed, 6 insertions(+), 9 deletions(-)
diff --git a/ECSMemoryPool/ecs_memorypool.h b/ECSMemoryPool/ecs_memorypool.h
index ba03ed7..e63658e 100644
--- a/ECSMemoryPool/ecs_memorypool.h
+++ b/ECSMemoryPool/ecs_memorypool.h
@@ -18,11 +18,11 @@ concept CompenentType = requires(T t, T other, const QJsonObject & in, QJsonObje
/// 组件引用符号
///
///
-template class ComponentRefer : protected MemoryChunk {
+template class ChunkRefer : protected MemoryChunk {
public:
- ComponentRefer(ElementControlBlock* data) : MemoryChunk(data) { referAdd(); }
- ComponentRefer(const ComponentRefer &other) :MemoryChunk(other.data_ptr) { referAdd(); }
- virtual ~ComponentRefer() { referSub(); }
+ ChunkRefer(ElementControlBlock* data) : MemoryChunk(data) { referAdd(); }
+ ChunkRefer(const ChunkRefer &other) :MemoryChunk(other.data_ptr) { referAdd(); }
+ virtual ~ChunkRefer() { referSub(); }
T* dataLock() {
return (T*)(MemoryChunk::dataLock());
@@ -72,7 +72,7 @@ public:
///
///
///
- template ComponentRefer generate() {
+ template ChunkRefer generate() {
std::lock_guard lockx(_pool_protected_);
auto type_code = T::typeCode();
@@ -117,7 +117,7 @@ public:
}
exists_reuse:
- ComponentRefer temp_inst(refer_ptr);
+ ChunkRefer temp_inst(refer_ptr);
auto data_pointer = temp_inst.dataLock();
refer_ptr->refer_count--;
auto dpair = _basic_component_memory_example[T::typeCode()];
diff --git a/ECSMemoryPool/memory_pages.h b/ECSMemoryPool/memory_pages.h
index 1eea16a..9061ec4 100644
--- a/ECSMemoryPool/memory_pages.h
+++ b/ECSMemoryPool/memory_pages.h
@@ -147,16 +147,13 @@ public:
///
///
void accessUpdate(uint64_t time_usec);
-
///
/// 设置数据活跃状态
///
- ///
void referAdd();
///
/// 设置数据活跃状态
///
- ///
void referSub();
///