用4D写的内存泄漏示例

时间:2016-02-26 00:39:36

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

使用4D编程语言编写的开发人员创建内存泄漏的一些示例是什么?

由开发人员创建的内存泄漏,我指的是错误编程所造成的内存泄漏,可以通过更好的编程来避免。

32位

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

  

TOTAL 3.7G

64位

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

1 个答案:

答案 0 :(得分:4)

概述

开发人员可以通过多种方式创建自己的内存泄漏。您希望避免的大部分内容都列在here

  
      
  • 使用变量
  • 时使用CLEAR VARIABLE   
  • 使用集合
  • 完成时使用CLEAR SET   
  • 使用命名选择时使用CLEAR NAMED SELECTION
  •   
  • 使用列表
  • 时使用CLEAR LIST   
  • 使用BLOB完成后,使用SET BLOB SIZE将BLOB重新调整为0或使用CLEAR VARIABLE
  •   
  • 使用数组完成后将数组重新调整为0或使用CLEAR VARIABLE   不要忘记关闭所有打开的XML树,例如 XML DOM SVG 等(DOM CLOSE XML,{ {1}})
  •   
  • 如果使用 ODBC ,请记住使用SVG_CLEAR
  • 释放连接   
  • 确保清理所有使用的屏幕外区域
  •   

实施例

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

忘记关闭XML

错误代码:

ODBC_SQLFreeConnect

上面的代码片段会泄漏内存,因为每次调用Repeat $xmlRef:=DOM Create XML Ref("root") Until (<>crashed_or_quit) 都会创建对内存位置的新引用,而此代码的开发人员忽略了包含释放内存的调用。在32位主机应用程序中循环运行它最终会导致崩溃。

固定代码:

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

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;*)