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:
2026-03-19 12:44:08 +08:00
parent e003fe6513
commit 58a83f445a
1012 changed files with 56880 additions and 22 deletions

View 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) - 返回类总览

View 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) - 内存池分配器

View 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) - 返回类总览

View 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) - 返回类总览

View 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) - 返回类总览

View 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) - 返回类总览

View 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) - 返回类总览

View 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) - 返回类总览

View 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) - 返回类总览