沉默流星 发表于 6 天前

有没有在堆上开辟空间的命令

如下面这两句
//在堆上开辟空间
huoshan::DAS* kaip = new huoshan::DAS();

//释放堆空间
delete kaip;

weilai 发表于 6 天前

视窗就是要避免直接堆上开空间

urenai 发表于 6 天前

本帖最后由 urenai 于 2024-11-16 19:00 编辑

似乎这些都是基础知识!!
Windows 操作系统提供了丰富的 API 来管理和操作堆(Heap),这些 API 主要位于 `kernel32.dll` 库中。堆是用于动态内存分配的区域,通过这些 API,程序可以创建、销毁堆,并在堆上分配或释放内存块。以下是一些常用的 Windows 堆操作 API:

1. **HeapCreate**
   - 创建一个新的堆对象。该函数返回一个句柄,此句柄可以用于其他堆操作函数。
   - 函数原型:`HANDLE HeapCreate(DWORD flOptions, SIZE_T dwInitialSize, SIZE_T dwMaximumSize);`

2. **HeapDestroy**
   - 销毁由 `HeapCreate` 创建的堆对象。销毁堆后,所有之前分配的内存块都自动释放。
   - 函数原型:`BOOL HeapDestroy(HANDLE hHeap);`

3. **HeapAlloc**
   - 在指定的堆中分配一块内存。
   - 函数原型:`LPVOID HeapAlloc(HANDLE hHeap, DWORD dwFlags, SIZE_T dwBytes);`

4. **HeapReAlloc**
   - 调整堆中已分配内存块的大小。如果新的大小小于原大小,则多余部分将被释放;如果大于原大小,则会尝试扩展内存块。
   - 函数原型:`LPVOID HeapReAlloc(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem, SIZE_T dwBytes);`

5. **HeapFree**
   - 释放之前通过 `HeapAlloc` 或 `HeapReAlloc` 分配的内存块。
   - 函数原型:`BOOL HeapFree(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem);`

6. **HeapSize**
   - 返回指定内存块的实际大小。这个大小可能比最初请求的大小要大,因为堆管理器可能会为管理信息预留额外的空间。
   - 函数原型:`SIZE_T HeapSize(HANDLE hHeap, DWORD dwFlags, LPCVOID lpMem);`

7. **HeapValidate**
   - 验证堆的完整性。如果堆损坏,该函数将返回 `FALSE`。
   - 函数原型:`BOOL HeapValidate(HANDLE hHeap, DWORD dwFlags, LPCVOID lpMem);`

8. **GetProcessHeaps**
   - 获取当前进程使用的所有堆的列表。这包括默认堆以及任何通过 `HeapCreate` 创建的堆。
   - 函数原型:`DWORD GetProcessHeaps(DWORD NumberOfHeaps, PHANDLE ProcessHeaps);`

9. **GetProcessHeap**
   - 获取当前进程的默认堆的句柄。
   - 函数原型:`HANDLE GetProcessHeap();`

这些 API 是底层的内存管理工具,使用不当可能导致内存泄漏或其他错误。因此,在调用这些函数时需要特别小心,确保正确地分配和释放内存。在实际开发中,通常推荐使用更高级别的语言特性或库来处理内存管理,例如 C++ 中的智能指针或 STL 容器,以减少出错的可能性。

沉默流星 发表于 6 天前

urenai 发表于 2024-11-16 18:58
似乎这些都是基础知识!!

我问的是火山当中的,并不是C++或者API

乐易论坛 发表于 5 天前

分配内存 这个命令 应该就是 在堆上的
页: [1]
查看完整版本: 有没有在堆上开辟空间的命令