重置上传,新增了多个标准库,开始 TransPyV 自举实验

This commit is contained in:
2026-07-19 11:38:15 +08:00
parent 796222a300
commit 4e66207ba1
1041 changed files with 6597 additions and 27814 deletions

View File

@@ -84,7 +84,7 @@ class MemManager:
string.memset(ptr, 0, total)
return ptr
def realloc(self, ptr: t.CVoid | t.CPtr, old_size: t.CSizeT, new_size: t.CSizeT) -> t.CVoid | t.CPtr:
def realloc(self, ptr: t.CVoid | t.CPtr, new_size: t.CSizeT) -> t.CVoid | t.CPtr:
if ptr is None:
return self.alloc(new_size)
if new_size == 0:
@@ -93,10 +93,7 @@ class MemManager:
new_ptr: t.CVoid | t.CPtr = self.alloc(new_size)
if new_ptr is None:
return ptr
copy_size: t.CSizeT = old_size
if new_size < old_size:
copy_size = new_size
string.memcpy(new_ptr, ptr, copy_size)
# 基类无法追踪旧分配大小, 不复制数据; 子类可覆盖以保留数据
self.free(ptr)
return new_ptr
@@ -453,7 +450,7 @@ class MemBuddy(MemManager):
return 1
# realloc 覆盖: 伙伴系统从块头读取旧阶数, 无需 old_size
def realloc(self, ptr: t.CVoid | t.CPtr, old_size: t.CSizeT, new_size: t.CSizeT) -> t.CVoid | t.CPtr:
def realloc(self, ptr: t.CVoid | t.CPtr, new_size: t.CSizeT) -> t.CVoid | t.CPtr:
if ptr is None:
return self.alloc(new_size)
if new_size == 0:
@@ -477,3 +474,48 @@ class MemBuddy(MemManager):
string.memcpy(new_ptr, ptr, old_data_size)
self.free(ptr)
return new_ptr
# === 状态查询 ===
@property
def mem_size(self) -> t.CSizeT:
# 可用区总大小2 的幂),分配上限为 mem_size - MEMBUDDY_HEADER_SIZE
return self.usable_size
def stats(self) -> t.CSizeT:
# 返回可用区总大小,用于状态统计
return self.usable_size
def free_count(self) -> t.CSizeT:
# 统计所有阶数空闲链中的块总数
count: t.CSizeT = 0
i: t.CInt
for i in range(MEMBUDDY_MAX_ORDERS + 1):
head_val: t.CUInt64T = self.free_lists[i]
cur: t.CVoid | t.CPtr = t.CVoid(head_val, t.CPtr)
while cur is not None:
count += 1
cur = t.CVoid(c.Deref(t.CUInt64T(cur, t.CPtr)), t.CPtr)
return count
def self_check(self) -> t.CInt:
# 验证伙伴分配器内部一致性,返回 0=OK非 0=损坏
if self.usable is None:
return 0
i: t.CInt
for i in range(MEMBUDDY_MAX_ORDERS + 1):
head_val: t.CUInt64T = self.free_lists[i]
cur: t.CVoid | t.CPtr = t.CVoid(head_val, t.CPtr)
while cur is not None:
# 检查指针在可用区内
if t.CUInt64T(cur) < t.CUInt64T(self.usable):
return 1
if t.CUInt64T(cur) >= t.CUInt64T(self.usable) + self.usable_size:
return 2
# 检查对齐order i 的块必须按 _block_size_at_order(i) 对齐
offset: t.CSizeT = t.CUInt64T(cur) - t.CUInt64T(self.usable)
bs: t.CSizeT = _block_size_at_order(i)
if offset % bs != 0:
return 3
cur = t.CVoid(c.Deref(t.CUInt64T(cur, t.CPtr)), t.CPtr)
return 0