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(); ///