memory-leaks - 用 4D 编写的内存泄漏示例

标签 memory-leaks out-of-memory 4d-database

用 4D 编程语言编写的开发人员制造内存泄漏的示例有哪些?

所谓开发人员创建的内存泄漏,我指的是由糟糕的编程造成的内存泄漏,这种泄漏本来可以通过更好的编程来避免。


32位

在 32 位应用程序中运行时,一旦尝试分配超过 2^32 字节 (4 GB) 的内存,它最终会崩溃。如果在 Mac OS X 平台上,VM 区域摘要 下方崩溃报告的底部应显示大约 3.7 GB 的内存值:

TOTAL               3.7G


64 位

当在 64 位应用程序中运行时,代码将继续增加分配的内存量,并且不会达到稳定状态,在这种情况下,操作系统最终会提示内存不足: Imgur

最佳答案

概述

开发人员可以通过多种方式造成自己的内存泄漏。 here 列出了您想要避免的大部分内容。 .

  • use CLEAR VARIABLE when done using a variable
  • use CLEAR SET when done using a set
  • use CLEAR NAMED SELECTION when done using a named selection
  • use CLEAR LIST when done using a list
  • re-size your BLOBs to 0 with SET BLOB SIZE when done using the BLOB or use CLEAR VARIABLE
  • re-size your arrays to 0 when done using the array or use CLEAR VARIABLE don't forget to close any open XML trees such as XML, DOM, SVG, etc (DOM CLOSE XML, SVG_CLEAR)
  • if using ODBC always remember to free the connection using ODBC_SQLFreeConnect
  • make sure to cleanup any offscreen areas used

示例

以下是开发人员造成的内存泄漏的两个具体示例:

忘记关闭 XML

错误代码:

Repeat 
  $xmlRef:=DOM Create XML Ref("root")
Until (<>crashed_or_quit)

上面的代码片段会泄漏内存,因为每次调用 DOM CREATE XML REF 都会创建对内存位置的新引用,而此代码的开发人员忽略了包含释放内存的调用内存。在 32 位主机应用程序中循环运行它最终会导致崩溃。

固定代码:

完成 XML 引用后,可以通过调用 DOM CLOSE XML 轻松修复此代码。

Repeat 
  $xmlRef:=DOM Create XML Ref("root")   
  DOM CLOSE XML($xmlRef)  
Until (<>crashed_or_quit)  

忘记清除列表

错误代码:

Repeat 
   $listRef:=New list
Until (<>crashed_or_quit)

上面的代码片段会泄漏内存,因为每次调用 NEW LIST 时都会返回对内存中新位置的引用。开发人员应该使用CLEAR LIST($listRef)命令清除引用位置的内存。作为奖励,如果列表附加了任何子列表,则可以通过传递 * 参数(如 CLEAR LIST($listRef;*))来清除子列表。

固定代码:

通过调用 CLEAR LIST($listRef;*) 可以轻松修复此问题,如以下修复示例所示:

Repeat 
   $listRef:=New list
   CLEAR LIST($listRef;*)
Until (<>crashed_or_quit)

关于memory-leaks - 用 4D 编写的内存泄漏示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35641241/

相关文章:

multithreading - 使用 OpenMP 时发生内存泄漏

iPhone 开发 : pointer being freed was not allocated

objective-c - 使用 UINavigationController View 进行内存管理

将图像编码和解码为 Base64 时出现 java 内存不足异常

parsing - 通用解析错误

PHP 在从数据库检索时截断散列密码

Android Monitor 显示我的应用程序内存不断增加

android 内存不足包括一些图像按钮

c# - 保存/创建/导出 Excel 工作表时出现 OutOfMemoryException

javascript - 将变量内容保存到文件