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,37 @@
# ProxyAllocator::Allocate
```cpp
void* Allocate(size_t size, size_t alignment = 0) override;
```
分配内存并记录统计。调用转发到底层分配器,同时递增分配计数和总分配字节数,并更新峰值记录。
**参数:**
- `size` - 请求的字节数
- `alignment` - 内存对齐要求
**返回:** 分配成功返回指针,失败返回 `nullptr`
**复杂度:** O(1)(底层分配器复杂度 + 统计更新)
**示例:**
```cpp
#include <XCEngine/Memory/MemoryManager.h>
#include <XCEngine/Memory/ProxyAllocator.h>
IAllocator* sysAlloc = MemoryManager::Get().GetSystemAllocator();
ProxyAllocator proxy(sysAlloc, "TrackedAlloc");
void* p1 = proxy.Allocate(100);
void* p2 = proxy.Allocate(200);
void* p3 = proxy.Allocate(300, 16);
const auto& stats = proxy.GetStats();
printf("Total: %zu, Peak: %zu, Count: %zu\n",
stats.totalAllocated, stats.peakAllocated, stats.allocationCount);
```
## 相关文档
- [ProxyAllocator 总览](proxy-allocator.md) - 返回类总览

View File

@@ -0,0 +1,42 @@
# ProxyAllocator::Free
```cpp
void Free(void* ptr) override;
```
释放内存并记录统计。调用转发到底层分配器,同时更新统计信息:递增 `totalFreed`(累加当前 `allocationCount`),并递减 `allocationCount`
**注意:** `totalFreed` 累加的是每次释放时的 `allocationCount`(分配计数)而非实际字节大小。这是一个简化的实现,用于追踪释放操作次数。
**参数:**
- `ptr` - 指向要释放的内存块
**返回:**
**复杂度:** O(1)(底层释放 + 统计更新)
**示例:**
```cpp
#include <XCEngine/Memory/MemoryManager.h>
#include <XCEngine/Memory/ProxyAllocator.h>
IAllocator* sysAlloc = MemoryManager::Get().GetSystemAllocator();
ProxyAllocator proxy(sysAlloc, "TrackedAlloc");
void* p1 = proxy.Allocate(512);
void* p2 = proxy.Allocate(256);
proxy.Free(p1);
proxy.Free(p2);
const auto& stats = proxy.GetStats();
// totalFreed 累加了每次释放时的 allocationCount次数非字节
// allocationCount 最终为 0
printf("Total allocated: %zu bytes, Freed count: %zu, Current count: %zu\n",
stats.totalAllocated, stats.totalFreed, stats.allocationCount);
```
## 相关文档
- [ProxyAllocator 总览](proxy-allocator.md) - 返回类总览

View File

@@ -0,0 +1,40 @@
# ProxyAllocator::GetStats
```cpp
const Stats& GetStats() const;
```
返回详细的统计信息结构体引用。包含累计分配、累计释放、峰值分配、分配次数和额外开销。返回 const 引用,无锁开销(内部已有互斥保护)。
**参数:**
**返回:** Stats 结构体 const 引用
**复杂度:** O(1)
**示例:**
```cpp
#include <XCEngine/Memory/MemoryManager.h>
#include <XCEngine/Memory/ProxyAllocator.h>
IAllocator* sysAlloc = MemoryManager::Get().GetSystemAllocator();
ProxyAllocator proxy(sysAlloc, "FrameData");
proxy.Allocate(1024);
proxy.Allocate(512);
proxy.Free(proxy.Allocate(256));
const ProxyAllocator::Stats& stats = proxy.GetStats();
printf("Total allocated: %zu bytes\n", stats.totalAllocated);
printf("Total freed: %zu times\n", stats.totalFreed);
printf("Peak allocated: %zu bytes\n", stats.peakAllocated);
printf("Allocation count: %zu\n", stats.allocationCount);
printf("Memory overhead: %zu bytes\n", stats.memoryOverhead);
printf("Current in use: %zu bytes\n",
stats.totalAllocated - stats.allocationCount * sizeof(/* typical block */ size_t));
```
## 相关文档
- [ProxyAllocator 总览](proxy-allocator.md) - 返回类总览

View File

@@ -0,0 +1,61 @@
# ProxyAllocator
**命名空间**: `XCEngine::Memory`
**类型**: `class`
**描述**: 代理分配器,用于统计和跟踪底层分配器的分配情况。
## 概述
`ProxyAllocator` 包装一个底层分配器,转发所有分配请求,同时记录详细的统计信息。它线程安全(使用互斥锁保护统计数据),适合需要监控内存使用的场景。
## 公共方法
| 方法 | 描述 |
|------|------|
| `ProxyAllocator` | 构造代理分配器 |
| `~ProxyAllocator` | 析构函数 |
| `Allocate` | 分配内存并记录统计 |
| `Free` | 释放内存并记录统计 |
| `Reallocate` | 转发到底层分配器 |
| `GetStats` | 获取详细统计信息 |
## 构造函数
```cpp
ProxyAllocator(IAllocator* underlying, const char* name);
```
构造一个代理分配器,包装底层分配器并记录分配统计。所有 `Allocate``Free``Reallocate` 调用都会被转发到底层分配器,同时记录统计信息。名称用于日志和报告。
**参数:**
- `underlying` - 被包装的底层分配器,不能为 `nullptr`
- `name` - 代理分配器的名称字符串
**返回:**
**复杂度:** O(1)
**示例:**
```cpp
#include <XCEngine/Memory/MemoryManager.h>
#include <XCEngine/Memory/ProxyAllocator.h>
MemoryManager::Get().Initialize();
// 使用系统分配器作为底层
IAllocator* sysAlloc = MemoryManager::Get().GetSystemAllocator();
ProxyAllocator proxy(sysAlloc, "TempAllocations");
// 通过代理分配
void* ptr = proxy.Allocate(1024);
proxy.Free(ptr);
```
## 相关文档
- [Memory 模块总览](../memory.md) - 返回模块总览
- [IAllocator](../allocator/allocator.md) - 分配器接口
- [MemoryManager](../manager/manager.md) - 内存管理器

View File

@@ -0,0 +1,38 @@
# ProxyAllocator::Reallocate
```cpp
void* Reallocate(void* ptr, size_t newSize) override;
```
重新分配内存。调用转发到底层分配器,不记录额外统计信息(底层分配器的返回值直接返回)。此方法线程安全,内部使用互斥锁保护。
**参数:**
- `ptr` - 现有内存块指针
- `newSize` - 新的字节大小
**返回:** 成功返回新指针,失败返回 `nullptr`(由底层分配器决定)
**复杂度:** O(n)(底层分配器 + 数据复制)
**示例:**
```cpp
#include <XCEngine/Memory/MemoryManager.h>
#include <XCEngine/Memory/ProxyAllocator.h>
IAllocator* sysAlloc = MemoryManager::Get().GetSystemAllocator();
ProxyAllocator proxy(sysAlloc, "TrackedAlloc");
void* p1 = proxy.Allocate(128);
void* p2 = proxy.Reallocate(p1, 256);
if (p2) {
// 重新分配成功
} else {
// 失败p1 仍然有效
}
```
## 相关文档
- [ProxyAllocator 总览](proxy-allocator.md) - 返回类总览

View File

@@ -0,0 +1,37 @@
# ProxyAllocator::~ProxyAllocator
```cpp
~ProxyAllocator() override;
```
销毁代理分配器。此析构函数不释放底层分配器,只清理代理分配器自身的统计信息(互斥锁等)。底层分配器由创建者负责管理。
**参数:**
**返回:**
**注意:** 析构函数不释放底层分配器。如果需要释放底层分配器,应先调用 `Shutdown` 或显式销毁底层分配器。
**示例:**
```cpp
#include <XCEngine/Memory/MemoryManager.h>
#include <XCEngine/Memory/ProxyAllocator.h>
{
MemoryManager::Get().Initialize();
IAllocator* sysAlloc = MemoryManager::Get().GetSystemAllocator();
auto proxy = MemoryManager::Get().CreateProxyAllocator("TrackedAlloc");
proxy->Allocate(1024);
// proxy 超出作用域时自动销毁
// 底层 sysAlloc 仍有效
MemoryManager::Get().Shutdown();
}
```
## 相关文档
- [ProxyAllocator 总览](proxy-allocator.md) - 返回类总览