fix: improve doc link navigation and tree display
- Fix link resolution with proper relative/absolute path handling - Improve link styling with underline decoration - Hide leaf nodes from tree, only show directories - Fix log file path for packaged app
This commit is contained in:
38
docs/api/memory/allocator/allocate.md
Normal file
38
docs/api/memory/allocator/allocate.md
Normal file
@@ -0,0 +1,38 @@
|
||||
# IAllocator::Allocate
|
||||
|
||||
```cpp
|
||||
virtual void* Allocate(size_t size, size_t alignment = 0) = 0;
|
||||
```
|
||||
|
||||
从分配器请求指定大小的内存块。如果 `alignment` 大于 0,则返回的地址将按该对齐值对齐。分配成功时返回有效指针,失败时返回 `nullptr` 或抛出异常(取决于具体实现)。
|
||||
|
||||
**参数:**
|
||||
- `size` - 请求的字节数
|
||||
- `alignment` - 内存对齐要求,默认为 0(表示使用实现默认对齐)
|
||||
|
||||
**返回:** 分配成功返回已分配内存块的指针,失败返回 `nullptr`
|
||||
|
||||
**复杂度:** O(1)(固定块分配器)或 O(n)(需要搜索合适大小的块)
|
||||
|
||||
**示例:**
|
||||
|
||||
```cpp
|
||||
#include <XCEngine/Memory/Allocator.h>
|
||||
|
||||
class MyAllocator : public IAllocator {
|
||||
public:
|
||||
void* Allocate(size_t size, size_t alignment = 0) override {
|
||||
// 使用系统 new 分配
|
||||
return ::operator new(size);
|
||||
}
|
||||
// ... 其他方法实现
|
||||
};
|
||||
|
||||
MyAllocator alloc;
|
||||
void* ptr = alloc.Allocate(256); // 分配 256 字节
|
||||
void* aligned = alloc.Allocate(64, 16); // 分配 64 字节,16 字节对齐
|
||||
```
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [IAllocator 总览](allocator.md) - 返回类总览
|
||||
72
docs/api/memory/allocator/allocator.md
Normal file
72
docs/api/memory/allocator/allocator.md
Normal file
@@ -0,0 +1,72 @@
|
||||
# IAllocator
|
||||
|
||||
**命名空间**: `XCEngine::Memory`
|
||||
|
||||
**类型**: `class` (abstract interface)
|
||||
|
||||
**描述**: 内存分配器抽象接口,定义标准分配协议。
|
||||
|
||||
## 概述
|
||||
|
||||
`IAllocator` 是 XCEngine 内存管理系统的核心抽象接口。它定义了分配、释放和重新分配内存的标准方法,以及内存统计接口。所有专用分配器(LinearAllocator、PoolAllocator、ProxyAllocator)都实现此接口。
|
||||
|
||||
## 公共方法
|
||||
|
||||
### 内存操作
|
||||
|
||||
| 方法 | 描述 |
|
||||
|------|------|
|
||||
| `Allocate` | 分配内存 |
|
||||
| `Free` | 释放内存 |
|
||||
| `Reallocate` | 重新分配内存 |
|
||||
|
||||
### 统计信息
|
||||
|
||||
| 方法 | 描述 |
|
||||
|------|------|
|
||||
| `GetTotalAllocated` | 获取已分配总字节数 |
|
||||
| `GetTotalFreed` | 获取已释放总字节数 |
|
||||
| `GetPeakAllocated` | 获取峰值分配字节数 |
|
||||
| `GetAllocationCount` | 获取分配次数 |
|
||||
|
||||
### 元信息
|
||||
|
||||
| 方法 | 描述 |
|
||||
|------|------|
|
||||
| `GetName` | 获取分配器名称 |
|
||||
|
||||
## 使用示例
|
||||
|
||||
```cpp
|
||||
#include <XCEngine/Memory/Allocator.h>
|
||||
|
||||
class MyAllocator : public IAllocator {
|
||||
public:
|
||||
void* Allocate(size_t size, size_t alignment = 0) override {
|
||||
return ::operator new(size);
|
||||
}
|
||||
|
||||
void Free(void* ptr) override {
|
||||
::operator delete(ptr);
|
||||
}
|
||||
|
||||
void* Reallocate(void* ptr, size_t newSize) override {
|
||||
void* newPtr = Allocate(newSize);
|
||||
Free(ptr);
|
||||
return newPtr;
|
||||
}
|
||||
|
||||
size_t GetTotalAllocated() const override { return m_allocated; }
|
||||
size_t GetTotalFreed() const override { return m_freed; }
|
||||
size_t GetPeakAllocated() const override { return m_peak; }
|
||||
size_t GetAllocationCount() const override { return m_count; }
|
||||
const char* GetName() const override { return "MyAllocator"; }
|
||||
};
|
||||
```
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [Memory 模块总览](../memory.md) - 返回模块总览
|
||||
- [MemoryManager](../manager/manager.md) - 内存管理器
|
||||
- [LinearAllocator](../linear-allocator/linear-allocator.md) - 线性分配器
|
||||
- [PoolAllocator](../pool-allocator/pool-allocator.md) - 内存池分配器
|
||||
40
docs/api/memory/allocator/free.md
Normal file
40
docs/api/memory/allocator/free.md
Normal file
@@ -0,0 +1,40 @@
|
||||
# IAllocator::Free
|
||||
|
||||
```cpp
|
||||
virtual void Free(void* ptr) = 0;
|
||||
```
|
||||
|
||||
释放之前通过 `Allocate` 分配的内存块。如果 `ptr` 为 `nullptr`,则此调用无效果。部分分配器(如 LinearAllocator)可能不支持此操作。
|
||||
|
||||
**参数:**
|
||||
- `ptr` - 指向要释放内存块的指针
|
||||
|
||||
**返回:** 无
|
||||
|
||||
**复杂度:** O(1)(固定块释放)或 O(n)(需要搜索)
|
||||
|
||||
**示例:**
|
||||
|
||||
```cpp
|
||||
#include <XCEngine/Memory/Allocator.h>
|
||||
|
||||
class MyAllocator : public IAllocator {
|
||||
public:
|
||||
void* Allocate(size_t size, size_t alignment = 0) override {
|
||||
return ::operator new(size);
|
||||
}
|
||||
|
||||
void Free(void* ptr) override {
|
||||
if (ptr) ::operator delete(ptr);
|
||||
}
|
||||
// ... 其他方法实现
|
||||
};
|
||||
|
||||
MyAllocator alloc;
|
||||
void* ptr = alloc.Allocate(512);
|
||||
alloc.Free(ptr); // 释放内存
|
||||
```
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [IAllocator 总览](allocator.md) - 返回类总览
|
||||
52
docs/api/memory/allocator/get-allocation-count.md
Normal file
52
docs/api/memory/allocator/get-allocation-count.md
Normal file
@@ -0,0 +1,52 @@
|
||||
# IAllocator::GetAllocationCount
|
||||
|
||||
```cpp
|
||||
virtual size_t GetAllocationCount() const = 0;
|
||||
```
|
||||
|
||||
返回当前处于已分配状态(未释放)的内存块数量。此方法用于监控活跃分配的数量。
|
||||
|
||||
**参数:** 无
|
||||
|
||||
**返回:** 当前已分配块的数量
|
||||
|
||||
**复杂度:** O(1)
|
||||
|
||||
**示例:**
|
||||
|
||||
```cpp
|
||||
#include <XCEngine/Memory/Allocator.h>
|
||||
|
||||
class MyAllocator : public IAllocator {
|
||||
size_t m_count = 0;
|
||||
public:
|
||||
void* Allocate(size_t size, size_t alignment = 0) override {
|
||||
++m_count;
|
||||
return ::operator new(size);
|
||||
}
|
||||
|
||||
void Free(void* ptr) override {
|
||||
if (ptr) {
|
||||
--m_count;
|
||||
::operator delete(ptr);
|
||||
}
|
||||
}
|
||||
|
||||
void* Reallocate(void* ptr, size_t newSize) override { /* ... */ }
|
||||
|
||||
size_t GetTotalAllocated() const override { return 0; }
|
||||
size_t GetTotalFreed() const override { return 0; }
|
||||
size_t GetPeakAllocated() const override { return 0; }
|
||||
size_t GetAllocationCount() const override { return m_count; }
|
||||
const char* GetName() const override { return "MyAllocator"; }
|
||||
};
|
||||
|
||||
MyAllocator alloc;
|
||||
alloc.Allocate(64);
|
||||
alloc.Allocate(128);
|
||||
size_t count = alloc.GetAllocationCount(); // 返回 2
|
||||
```
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [IAllocator 总览](allocator.md) - 返回类总览
|
||||
40
docs/api/memory/allocator/get-name.md
Normal file
40
docs/api/memory/allocator/get-name.md
Normal file
@@ -0,0 +1,40 @@
|
||||
# IAllocator::GetName
|
||||
|
||||
```cpp
|
||||
virtual const char* GetName() const = 0;
|
||||
```
|
||||
|
||||
返回分配器的名称字符串。此方法用于调试、日志记录和内存报告,帮助识别不同分配器的使用情况。
|
||||
|
||||
**参数:** 无
|
||||
|
||||
**返回:** 分配器的名称字符串
|
||||
|
||||
**复杂度:** O(1)
|
||||
|
||||
**示例:**
|
||||
|
||||
```cpp
|
||||
#include <XCEngine/Memory/Allocator.h>
|
||||
|
||||
class MyAllocator : public IAllocator {
|
||||
public:
|
||||
void* Allocate(size_t size, size_t alignment = 0) override { return ::operator new(size); }
|
||||
void Free(void* ptr) override { if (ptr) ::operator delete(ptr); }
|
||||
void* Reallocate(void* ptr, size_t newSize) override { /* ... */ }
|
||||
|
||||
size_t GetTotalAllocated() const override { return 0; }
|
||||
size_t GetTotalFreed() const override { return 0; }
|
||||
size_t GetPeakAllocated() const override { return 0; }
|
||||
size_t GetAllocationCount() const override { return 0; }
|
||||
const char* GetName() const override { return "MyAllocator"; }
|
||||
};
|
||||
|
||||
MyAllocator alloc;
|
||||
const char* name = alloc.GetName(); // 返回 "MyAllocator"
|
||||
printf("Allocator: %s\n", name);
|
||||
```
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [IAllocator 总览](allocator.md) - 返回类总览
|
||||
57
docs/api/memory/allocator/get-peak-allocated.md
Normal file
57
docs/api/memory/allocator/get-peak-allocated.md
Normal file
@@ -0,0 +1,57 @@
|
||||
# IAllocator::GetPeakAllocated
|
||||
|
||||
```cpp
|
||||
virtual size_t GetPeakAllocated() const = 0;
|
||||
```
|
||||
|
||||
返回此分配器自创建以来达到的峰值分配字节数。该值在每次分配后更新,用于监控内存使用高峰。
|
||||
|
||||
**参数:** 无
|
||||
|
||||
**返回:** 峰值分配字节数
|
||||
|
||||
**复杂度:** O(1)
|
||||
|
||||
**示例:**
|
||||
|
||||
```cpp
|
||||
#include <XCEngine/Memory/Allocator.h>
|
||||
|
||||
class MyAllocator : public IAllocator {
|
||||
size_t m_peak = 0;
|
||||
size_t m_current = 0;
|
||||
public:
|
||||
void* Allocate(size_t size, size_t alignment = 0) override {
|
||||
void* ptr = ::operator new(size);
|
||||
m_current += size;
|
||||
if (m_current > m_peak) m_peak = m_current;
|
||||
return ptr;
|
||||
}
|
||||
|
||||
void Free(void* ptr) override {
|
||||
if (ptr) {
|
||||
size_t size = 256; // 需要外部记录
|
||||
::operator delete(ptr);
|
||||
m_current -= size;
|
||||
}
|
||||
}
|
||||
|
||||
void* Reallocate(void* ptr, size_t newSize) override { /* ... */ }
|
||||
|
||||
size_t GetTotalAllocated() const override { return 0; }
|
||||
size_t GetTotalFreed() const override { return 0; }
|
||||
size_t GetPeakAllocated() const override { return m_peak; }
|
||||
size_t GetAllocationCount() const override { return 0; }
|
||||
const char* GetName() const override { return "MyAllocator"; }
|
||||
};
|
||||
|
||||
MyAllocator alloc;
|
||||
alloc.Allocate(100);
|
||||
size_t peak1 = alloc.GetPeakAllocated(); // 100
|
||||
alloc.Allocate(50);
|
||||
size_t peak2 = alloc.GetPeakAllocated(); // 150
|
||||
```
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [IAllocator 总览](allocator.md) - 返回类总览
|
||||
50
docs/api/memory/allocator/get-total-allocated.md
Normal file
50
docs/api/memory/allocator/get-total-allocated.md
Normal file
@@ -0,0 +1,50 @@
|
||||
# IAllocator::GetTotalAllocated
|
||||
|
||||
```cpp
|
||||
virtual size_t GetTotalAllocated() const = 0;
|
||||
```
|
||||
|
||||
返回此分配器自创建以来累计分配的字节总数。这是一个只读查询操作,不会修改任何内部状态。
|
||||
|
||||
**参数:** 无
|
||||
|
||||
**返回:** 累计已分配的字节数
|
||||
|
||||
**复杂度:** O(1)
|
||||
|
||||
**示例:**
|
||||
|
||||
```cpp
|
||||
#include <XCEngine/Memory/Allocator.h>
|
||||
|
||||
class MyAllocator : public IAllocator {
|
||||
size_t m_allocated = 0;
|
||||
public:
|
||||
void* Allocate(size_t size, size_t alignment = 0) override {
|
||||
void* ptr = ::operator new(size);
|
||||
m_allocated += size;
|
||||
return ptr;
|
||||
}
|
||||
|
||||
void Free(void* ptr) override {
|
||||
if (ptr) ::operator delete(ptr);
|
||||
}
|
||||
|
||||
void* Reallocate(void* ptr, size_t newSize) override { /* ... */ }
|
||||
|
||||
size_t GetTotalAllocated() const override { return m_allocated; }
|
||||
size_t GetTotalFreed() const override { return 0; }
|
||||
size_t GetPeakAllocated() const override { return m_allocated; }
|
||||
size_t GetAllocationCount() const override { return 0; }
|
||||
const char* GetName() const override { return "MyAllocator"; }
|
||||
};
|
||||
|
||||
MyAllocator alloc;
|
||||
alloc.Allocate(100);
|
||||
alloc.Allocate(200);
|
||||
size_t total = alloc.GetTotalAllocated(); // 返回 300
|
||||
```
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [IAllocator 总览](allocator.md) - 返回类总览
|
||||
50
docs/api/memory/allocator/get-total-freed.md
Normal file
50
docs/api/memory/allocator/get-total-freed.md
Normal file
@@ -0,0 +1,50 @@
|
||||
# IAllocator::GetTotalFreed
|
||||
|
||||
```cpp
|
||||
virtual size_t GetTotalFreed() const = 0;
|
||||
```
|
||||
|
||||
返回此分配器自创建以来累计释放的字节总数。部分分配器(如 LinearAllocator)可能始终返回 0,因为它们不跟踪单个释放操作。
|
||||
|
||||
**参数:** 无
|
||||
|
||||
**返回:** 累计已释放的字节数
|
||||
|
||||
**复杂度:** O(1)
|
||||
|
||||
**示例:**
|
||||
|
||||
```cpp
|
||||
#include <XCEngine/Memory/Allocator.h>
|
||||
|
||||
class MyAllocator : public IAllocator {
|
||||
size_t m_freed = 0;
|
||||
public:
|
||||
void* Allocate(size_t size, size_t alignment = 0) override { return ::operator new(size); }
|
||||
|
||||
void Free(void* ptr) override {
|
||||
if (ptr) {
|
||||
size_t size = 256; // 需要外部记录
|
||||
::operator delete(ptr);
|
||||
m_freed += size;
|
||||
}
|
||||
}
|
||||
|
||||
void* Reallocate(void* ptr, size_t newSize) override { /* ... */ }
|
||||
|
||||
size_t GetTotalAllocated() const override { return 0; }
|
||||
size_t GetTotalFreed() const override { return m_freed; }
|
||||
size_t GetPeakAllocated() const override { return 0; }
|
||||
size_t GetAllocationCount() const override { return 0; }
|
||||
const char* GetName() const override { return "MyAllocator"; }
|
||||
};
|
||||
|
||||
MyAllocator alloc;
|
||||
void* ptr = alloc.Allocate(128);
|
||||
alloc.Free(ptr);
|
||||
size_t freed = alloc.GetTotalFreed(); // 返回 128
|
||||
```
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [IAllocator 总览](allocator.md) - 返回类总览
|
||||
55
docs/api/memory/allocator/reallocate.md
Normal file
55
docs/api/memory/allocator/reallocate.md
Normal file
@@ -0,0 +1,55 @@
|
||||
# IAllocator::Reallocate
|
||||
|
||||
```cpp
|
||||
virtual void* Reallocate(void* ptr, size_t newSize) = 0;
|
||||
```
|
||||
|
||||
调整已分配内存块的大小。如果 `ptr` 为 `nullptr`,行为等同于 `Allocate(newSize)`。如果 `newSize` 为 0,行为等同于 `Free(ptr)` 并返回 `nullptr`。如果分配器不支持重新分配,应返回 `nullptr` 并保持原内存不变。
|
||||
|
||||
**参数:**
|
||||
- `ptr` - 指向现有内存块的指针
|
||||
- `newSize` - 新的字节大小
|
||||
|
||||
**返回:** 调整后的新内存块指针(可能与原指针不同)
|
||||
|
||||
**复杂度:** O(n),需要分配新内存并复制数据
|
||||
|
||||
**示例:**
|
||||
|
||||
```cpp
|
||||
#include <XCEngine/Memory/Allocator.h>
|
||||
|
||||
class MyAllocator : public IAllocator {
|
||||
public:
|
||||
void* Allocate(size_t size, size_t alignment = 0) override {
|
||||
return ::operator new(size);
|
||||
}
|
||||
|
||||
void Free(void* ptr) override {
|
||||
if (ptr) ::operator delete(ptr);
|
||||
}
|
||||
|
||||
void* Reallocate(void* ptr, size_t newSize) override {
|
||||
if (newSize == 0) {
|
||||
Free(ptr);
|
||||
return nullptr;
|
||||
}
|
||||
if (!ptr) return Allocate(newSize);
|
||||
|
||||
size_t oldSize = /* 需要外部记录 */ 256; // 示例中硬编码
|
||||
void* newPtr = Allocate(newSize);
|
||||
memcpy(newPtr, ptr, oldSize < newSize ? oldSize : newSize);
|
||||
Free(ptr);
|
||||
return newPtr;
|
||||
}
|
||||
// ... 其他方法实现
|
||||
};
|
||||
|
||||
MyAllocator alloc;
|
||||
void* ptr = alloc.Allocate(128);
|
||||
void* bigger = alloc.Reallocate(ptr, 256); // 扩展到 256 字节
|
||||
```
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [IAllocator 总览](allocator.md) - 返回类总览
|
||||
Reference in New Issue
Block a user