递归火山软件开发平台

标题: 有没有在堆上开辟空间的命令 [打印本页]

作者: 沉默流星    时间: 5 天前
标题: 有没有在堆上开辟空间的命令
如下面这两句
  1. //在堆上开辟空间
  2. huoshan::DAS* kaip = new huoshan::DAS();

  3. //释放堆空间
  4. delete kaip;
复制代码



作者: weilai    时间: 5 天前
视窗就是要避免直接堆上开空间
作者: urenai    时间: 5 天前
本帖最后由 urenai 于 2024-11-16 19:00 编辑

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

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

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

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

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

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

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

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

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

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

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



作者: 沉默流星    时间: 5 天前
urenai 发表于 2024-11-16 18:58
似乎这些都是基础知识!!

我问的是火山当中的,并不是C++或者API
作者: 乐易论坛    时间: 4 天前
分配内存 这个命令 应该就是 在堆上的




欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4