- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个 Common Lisp 函数使用极其简单的幼儿园级算法和一些“案例”测试来简单地计算墙壁线框边缘的四个顶点,似乎负责为每个渲染帧动态分配 196608 字节; SBCL 的分析器告诉我,就 consing 而言,这是我最有问题的功能。为了大致了解我在做什么,这是一个小型的第一人称地牢爬行游戏,地牢正好是 32x32 的单元格,每个单元格有 4 面墙。 32 * 32 * 4 * x = 196608,所以 x 结果是 48,恰好是 4 * 12(4 面墙 * 每面墙 12 个浮点数?也许不是)。
现在,我可以通过在游戏模式中使用 OpenGL 显示列表轻松缓解这个性能问题,我想这就是我将继续做的事情。尽管如此,1) 我通常不会过早地优化,更重要的是 2) 我仍然不喜欢让某些烦人的瘙痒像这样不被划伤,我想知道我还能做些什么。我的功能如下:
(defun calculate-wall-points (x y wall)
(declare (integer x y)
(keyword wall))
"Return the 4 vertices (12 floats) of a given dungeon cell wall"
(let ((xf (coerce x 'float))
(yf (coerce y 'float)))
(case wall
(:SOUTH
(values xf yf 0.0
(1+ xf) yf 0.0
(1+ xf) yf 1.0
xf yf 1.0))
(:WEST
(values xf yf 0.0
xf yf 1.0
xf (1+ yf) 1.0
xf (1+ yf) 0.0))
(:NORTH
(values xf (1+ yf) 0.0
xf (1+ yf) 1.0
(1+ xf) (1+ yf) 1.0
(1+ xf) (1+ yf) 0.0))
(:EAST
(values (1+ xf) (1+ yf) 0.0
(1+ xf) (1+ yf) 1.0
(1+ xf) yf 1.0
(1+ xf) yf 0.0))
(otherwise
(error "Not a valid heading passed for wall in function calculate-wall-points: ~A" wall)))))
(defun render-dungeon-room (dungeon-object x y)
(declare (optimize (speed 3) (space 0) (debug 0)))
(declare (type fixnum x y))
(let ((cell (cell-at dungeon-object x y)))
(unless (null cell)
(dolist (wall-heading +basic-headings+)
(unless (eq wall-heading (opposite-heading *active-player-heading*))
(when (eql (get-wall-type cell wall-heading) :NORMAL)
(multiple-value-bind (v1x v1y v1z v2x v2y v2z v3x v3y v3z v4x v4y v4z)
(calculate-wall-points x y wall-heading)
(declare (type float v1x v1y v1z v2x v2y v2z v3x v3y v3z v4x v4y v4z))
(gl:with-primitive :quads
(if (is-edit-mode)
(case wall-heading
(:NORTH
(gl:color 0.4 0.4 0.4))
(:WEST
(gl:color 0.4 0.0 0.0))
(:SOUTH
(gl:color 0.0 0.0 0.4))
(:EAST
(gl:color 0.0 0.4 0.0)))
(gl:color 0.1 0.1 0.1))
(gl:vertex (the float v1x)
(the float v1y)
(the float v1z))
(gl:vertex (the float v2x)
(the float v2y)
(the float v2z))
(gl:vertex (the float v3x)
(the float v3y)
(the float v3z))
(gl:vertex (the float v4x)
(the float v4y)
(the float v4z)))
(gl:color 1.0 1.0 1.0)
(gl:with-primitive :line-loop
(gl:vertex (the float v1x)
(the float v1y)
(the float v1z))
(gl:vertex (the float v2x)
(the float v2y)
(the float v2z))
(gl:vertex (the float v3x)
(the float v3y)
(the float v3z))
(gl:vertex (the float v4x)
(the float v4y)
(the float v4z)))))))))
最佳答案
consed 内存是由分配浮点数引起的。每个函数调用都返回浮点数,实际上是 32 位 single-floats
. Consing 意味着在堆上分配了一些数据:cons 单元格、数字、数组……
一个 single-float
是 32 位内存对象。 4字节。
(+ 1.0 2.0) -> 3.0
3.0
是一个新的 float ,可能是新的。
(+ (+ 1.0 2.0) 4.0) -> 7.0)
+
操作返回一个浮点数
3.0
.它会发生什么?
structure
?在一个新的 CLOS 对象中?
关于performance - 在这个 Common Lisp 函数中消除 "mystery-consing"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12229723/
假设我有一个具有以下属性的虚拟机 FQDN :trialinstance.westus.cloudapp.azure.com Public IP : XXX.XXX.XXX.XXX Private I
假设我有一个具有以下属性的虚拟机 FQDN :trialinstance.westus.cloudapp.azure.com Public IP : XXX.XXX.XXX.XXX Private I
在移植游戏时,我得出以下声明 Object o = new Object[]{"A","B"}; 真的很奇怪! 但是当我尝试对“String”进行同样的操作时,编译器会向我报告错误消息 String
作为一个更大项目的一部分,我一直在构建一个编程语言检测器,即代码片段的分类器。我的基线模型非常简单:将输入标记化并将片段编码为词袋,或者,在这种情况下,bag-of-tokens,并在这些特征之上制作
我忘记将附带的变量添加到 printf() 调用中。 printf() 如何知道我要打印什么? int successful = 0;//Flag printf("\nEnter a number t
我正在集成 HTML 编辑器 CKEditor在我的 Cocoa 应用程序中使用 WebView。 到目前为止,它按预期工作,除了一件事:如果我打开 NSColorPanel在应用程序的任何其他位置并
我正在开发一款适用于 Android 的应用程序。在我的代码中有以下几行: if (shape != null && !created && isTap(touchDown, event)) {
我正在尝试对指向某个类的智能指针 vector 进行排序。我使用结构作为 std::sort 的第三个参数与 operator() : struct PhraseSmartPtrParseCreati
我在使用自动引用计数的 iOS 4.3 和 iOS 5 中工作。我在我的界面中声明了一个 NSDate 对象: NSDate *fingerprintsDate; 稍后,我设置了 NSDate - 使
最近我正在修复某人的代码。有一个大类不会解除分配。您必须发布 5 或 6 个版本才能将其释放。 我仔细地翻遍了大类,最终找到了各种需要发布的东西。 这让我思考:必须有一些非常简单的方法来“查找”对象上
这让我发疯。我有一个 UITableView,复制并粘贴了它。第二个在第一个单元格之前没有顶部填充,第一个有。堆栈中也没有神秘的 View 。到底是怎么回事?我要疯了,不想删除 UITableView
我遇到一个问题,IE 9(可能还有其他版本)无法正确显示我的水平列表。如您所见,最右边的元素被向下推了一点。 HTML: Lorem ipsum dolor sit ame
我已经为 .它按预期呈现,除了 svg 元素底部边缘的水平线。 svg来源是 你可以在这里看到错误的水平线 Codepen (它在底部,蓝色...)。 我希望线路消失
我从 Crashlytics 得到的报告是 Crashed: com.apple.main-thread SIGABRT ABORT at 0x357fedf0 我如何缩小这个谜团崩溃的范围? 此外,
我在 Git 中看到一个对我来说似乎非常神秘的行为。我保留了来自 Github 的 Linux 存储库的克隆。在本地玩 Git。明确地说,我在这个存储库中没有做太多事情:我获取更改、更新 master
关于 我有一个 android 应用程序,它有 2 个 Activity 。 Activity A 产生 Activity B, Activity B 访问另一个模块中的房间数据库。我使用 Koin
这个 Common Lisp 函数使用极其简单的幼儿园级算法和一些“案例”测试来简单地计算墙壁线框边缘的四个顶点,似乎负责为每个渲染帧动态分配 196608 字节; SBCL 的分析器告诉我,就 co
我正在解决“情书之谜”问题,可能我的逻辑是正确的,但它显示了时间问题问题是 Question here .我的解决方案如下。它包含两个函数,一个是theLoveLetterMystery(String
我正在通过 OpenGL 在伪二维 Canvas 中显示四边形。为此,我通过以下方式使用正交投影: gl.glMatrixMode(GL10.GL_PROJECTION); gl.glLoadIden
我的程序似乎总是会产生荒谬的错误。请给我指路。下面的代码段删掉了所有不相关的部分。谢谢。 代码段A部分似乎没有正确初始化数组,如何调试?代码段的 B 部分总是崩溃,我是否遗漏了什么? typedef
我是一名优秀的程序员,十分优秀!