使用4D编程语言编写的开发人员创建内存泄漏的一些示例是什么?
由开发人员创建的内存泄漏,我指的是错误编程所造成的内存泄漏,可以通过更好的编程来避免。
在32位应用程序中运行时,一旦尝试分配超过2 ^ 32字节(4 GB)的内存,它最终应该崩溃。如果在Mac OS X平台上,VM Region Summary
下面的崩溃报告底部应显示大约3.7 GB的内存值:
TOTAL 3.7G
当在64位应用程序中运行时,代码将继续增加分配的内存量,并且不会达到稳定状态,在这种情况下,操作系统最终会抱怨内存不足:
答案 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;*)