|
|
| 变量名 | 类 型 | 静态 | 数组 | 备 注 | | 原堆句柄 | 整数型 | | | | 数据指针 | 整数型 | | | | 结构指针 | 整数型 | | |
如果真 (申请长度 ≤ 0 ) 申请长度 = 1024 原堆句柄 = GetProcessHeap ()数据指针 = HeapAlloc (原堆句柄, #HEAP_ZERO_MEMORY, 申请长度 )结构指针 = HeapAlloc (原堆句柄, #HEAP_ZERO_MEMORY, 16 )_Set (结构指针, #结构_数据大小, 0 ) _Set (结构指针, #结构_数据指针, 数据指针 ) _Set (结构指针, #结构_空间大小, 申请长度 ) _Set (结构指针, #结构_原堆句柄, 原堆句柄 ) 返回 (结构指针 )| 变量名 | 类 型 | 静态 | 数组 | 备 注 | | 原堆句柄 | 整数型 | | | | 数据指针 | 整数型 | | |
原堆句柄 = _Get (结构指针, #结构_原堆句柄 )数据指针 = _Get (结构指针, #结构_数据指针 ) 如果真 (数据指针 ≠ 0 ) HeapFree (原堆句柄, 0, 数据指针 )HeapFree (原堆句柄, 0, 结构指针)|
| 分配字节集指针 | 逻辑型 | | |
| 结构指针 | 整数型 | | | | 数据长度 | 整数型 | | | |
| 变量名 | 类 型 | 静态 | 数组 | 备 注 | | 原堆句柄 | 整数型 | | | | 数据指针 | 整数型 | | | | 分配大小 | 整数型 | | | | 分配指针 | 整数型 | | |
原堆句柄 = _Get (结构指针, #结构_原堆句柄 )数据指针 = _Get (结构指针, #结构_数据指针 )分配大小 = (_Get (结构指针, #结构_数据大小 ) + 数据长度 ) × 2 分配指针 = HeapReAlloc (原堆句柄, #HEAP_REALLOC_IN_PLACE_ONLY, 数据指针, 分配大小 ) 如果真 (分配指针 = 0 )  分配指针 = HeapReAlloc (原堆句柄, 0, 数据指针, 分配大小 ) 如果真 (分配指针 = 0 )  返回 (假) _Set (结构指针, #结构_数据指针, 分配指针) _Set (结构指针, #结构_空间大小, 分配大小 ) 返回 (真)RtlZeroMemory (_Get (结构指针, #结构_数据指针 ), _Get (结构指针, #结构_数据大小 )) _Set (结构指针, #结构_数据大小, 0 )_Set (结构指针, #结构_上传大小, 0 )|
| 字节集读取_指针 | 整数型 | | |
| 结构指针 | 整数型 | | | | 追加指针 | 整数型 | | | | 追加长度 | 整数型 | | | |
| 变量名 | 类 型 | 静态 | 数组 | 备 注 | | 原上传大小 | 整数型 | | | | 原数据大小 | 整数型 | | | | 原数据指针 | 整数型 | | | | 剩余长度 | 整数型 | | | | 上传长度 | 整数型 | | |
原上传大小 = _Get (结构指针, #结构_上传大小 )原数据大小 = _Get (结构指针, #结构_数据大小 )剩余长度 = 原数据大小 - 原上传大小 如果真 (剩余长度 > 0 ) 原数据指针 = _Get (结构指针, #结构_数据指针 ) 上传长度 = 选择 (追加长度 > 剩余长度, 剩余长度, 追加长度 ) RtlMoveMemory (追加指针, 原数据指针 + 原上传大小, 上传长度 ) _Set (结构指针, #结构_上传大小, 原上传大小 + 上传长度 ) 返回 (上传长度 )返回 (0)|
| 字节集追加_指针 | 逻辑型 | | |
| 结构指针 | 整数型 | | | | 追加指针 | 整数型 | | | | 追加长度 | 整数型 | | | |
| 变量名 | 类 型 | 静态 | 数组 | 备 注 | | 原空间大小 | 整数型 | | | | 原数据大小 | 整数型 | | | | 新数据大小 | 整数型 | | | | 原数据指针 | 整数型 | | |
原数据大小 = _Get (结构指针, #结构_数据大小 )原空间大小 = _Get (结构指针, #结构_空间大小 )新数据大小 = 原数据大小 + 追加长度 如果真 (新数据大小 > 原空间大小 )  如果真 (分配字节集指针 (结构指针, 追加长度 ) = 假) 返回 (假) 原数据指针 = _Get (结构指针, #结构_数据指针 ) RtlMoveMemory (原数据指针 + 原数据大小, 追加指针, 追加长度 )_Set (结构指针, #结构_数据大小, 新数据大小 )返回 (真)|
| 字节集追加_字节集 | 逻辑型 | | |
| 结构指针 | 整数型 | | | | 追加数据 | 字节集 | | | | 追加长度 | 整数型 | | | |
| 变量名 | 类 型 | 静态 | 数组 | 备 注 | | 原空间大小 | 整数型 | | | | 原数据大小 | 整数型 | | | | 新数据大小 | 整数型 | | |
如果真 (是否为空 (追加长度 ))  追加长度 = 取字节集长度 (追加数据 )原数据大小 = _Get (结构指针, #结构_数据大小 )原空间大小 = _Get (结构指针, #结构_空间大小 )新数据大小 = 原数据大小 + 追加长度 如果真 (新数据大小 > 原空间大小 )  如果真 (分配字节集指针 (结构指针, 追加长度 ) = 假) 返回 (假) RtlMoveMemory (_Get (结构指针, #结构_数据指针 ) + 原数据大小, _取指针字节集 (追加数据), 追加长度)_Set (结构指针, #结构_数据大小, 新数据大小 )返回 (真)|
| 字节集追加_文本型 | 逻辑型 | | |
| 结构指针 | 整数型 | | | | 追加数据 | 文本型 | | | | 追加长度 | 整数型 | | | |
| 变量名 | 类 型 | 静态 | 数组 | 备 注 | | 原空间大小 | 整数型 | | | | 原数据大小 | 整数型 | | | | 新数据大小 | 整数型 | | |
如果真 (是否为空 (追加长度 ))  追加长度 = 取文本长度 (追加数据 )原数据大小 = _Get (结构指针, #结构_数据大小 )原空间大小 = _Get (结构指针, #结构_空间大小 )新数据大小 = 原数据大小 + 追加长度 如果真 (新数据大小 > 原空间大小 )  如果真 (分配字节集指针 (结构指针, 追加长度 ) = 假) 返回 (假) RtlMoveMemory (_Get (结构指针, #结构_数据指针 ) + 原数据大小, _取指针文本型 (追加数据), 追加长度)_Set (结构指针, #结构_数据大小, 新数据大小 )返回 (真)
这个写法可以参考,类似快速字节集,自己管理堆内存,不用每次都申请,追加空间不够了尝试拓展,拓展不了就新开辟内存,和快速字节集原理一样,这样追加就很快
|
|