我正在制作这个非常简单的应用程序来帮助我探索nodejs,我有一个特殊的处理程序,它根据我数据库中的top10消息生成HTML代码.我有问题循环通过消息并调用函数生成HTML并将结果附加到我的html字符串.
function CreateMessageboard(BoardMessages){
var htmlMessageboardString = "";
[... Console debug code ...]
for(var i = 0; i < BoardMessages.length;i++){
(function(){
var j = i;
console.log("Loading message %d".green, j);
htmlMessageboardString += MessageToHTMLString(BoardMessages[j]);
})();
}
}
Run Code Online (Sandbox Code Playgroud)
我认为我的问题是由于Javascript处理循环的方式,与我读到的闭包相关,这是我在上面尝试使用的,或者是异步方式nodejs处理我的函数.现在,10个结果很好地从数据库返回,但最后一条消息在每个循环处理.
我也试过,而不是做var j = i,取值i作为函数参数并将其传递给闭包,它仍然返回相同的结果.
我有一种感觉,我错过了解决我的问题的批判性知识,我可以了解这件事吗?
编辑:我欢迎提供代码的任何其他信息,我发布了整个git repo但人们可能不想游泳整个项目来帮助我调试这个问题所以我发布了整个函数评论提供更多背景信息.
我正在做一个业余爱好操作系统项目,并试图设置虚拟内存。我在 x86 架构中还有另一个使用页表的项目,但我现在正在学习 ArmV8。
现在,用于寻址的最大位数是 48 [1]。最后 12 到 16 位“按原样”用于在所选区域内进行索引(取决于选择的颗粒大小[2])。
我只是不明白我们如何获得这些中间位。显然,文档显示使用了中间表[3],但尚不清楚如何使用这些表。
在下图的前半部分中,我们看到使用 4k 颗粒并使用 38 个地址位的地址转换。

我完全无法理解这个图像。“偏移量”,例如位 38 到 30,指向 L1 表中的条目。该表是如何定义的以及在哪里定义的?
我认为正在发生的是,这是一个 12+8+8+8 地址转换方案。从右边开始,12 位查找 4096 内存块内的偏移量。右边是 L3 的 8 位,这意味着 L3 索引 256 个 4096 字节 (1MB) 的块。右边的 L2 也有 8 位,因此有 256 个 (256*4096) 条目,每个 L2 条目总计 256MB。L2 的右侧是 L1,也是 8 位,256 个 256MB 的条目意味着总可寻址内存为 64GB 物理 RAM。
我认为这是不正确的,因为这只允许内存的 1:1 映射。每个表描述符需要携带一些访问标志等等。因此回到问题:这些表是如何定义的。每个偏移部分都是 8 位,这不足以包含转换表的地址。
无论如何,我完全迷失了。如果有人能给我一个关于如何完成翻译表行走的“简单英语”解释,我将不胜感激?一张图表会很好,但可能太费力了,我会制作一个图表并在之后分享以帮助我综合信息。或者至少,如果有人有一个好的视频/指南的链接,其中的信息没有完全混淆?
以下是我查阅过的材料清单:
https://developer.arm.com/documentation/den0024/a/The-Memory-Management-Unit/Translated-a-Virtual-Address-to-a-Physical-Address https://forums.raspberrypi.com/viewtopic .php?t=227139
我正在尝试创建一个需要会话支持的WCF服务,所以我在web.config中添加了一个部分来启用wsHttpBinding.但是,当我在WCF测试客户端中测试服务并检查配置时,它似乎采用了默认的自动生成的配置而不是我自己的配置.
看我的配置:
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="UserService">
<endpoint address="" binding="wsHttpBinding" contract="ICenterPlaceUserService" />
</service>
</services>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
Run Code Online (Sandbox Code Playgroud)
结果如下:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_ICenterPlaceUserService" sendTimeout="00:05:00" />
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:57418/L1.WCF/CenterPlaceUserService.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ICenterPlaceUserService"
contract="ICenterPlaceUserService" name="BasicHttpBinding_ICenterPlaceUserService" />
</client>
</system.serviceModel>
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
我是OpenGL的初学者,我正在尝试绘制一个彩色方块,我按照OpenGL Book中的教程进行操作,我正在使用该示例在此处绘制.由于这绘制了一个三角形,我修改了代码以绘制4个顶点.我创建了一个Rectangle类,可以以数组格式输出数据.这是我试图传递给glBufferData函数的数据.
不幸的是,当我使用我的班级数据时,它不会在屏幕上绘制任何内容.我甚至在检查gDebugger,我正在查看我的VBO并且数据不正确.

为了测试,我从我的类中提取了顶点并在本地数组中使用它们而不是从我的类返回的指针.
我的数据现在是:
Vertex Vertices[] =
{
{ { -0.5f, 0.5f, 0.0f, 1.0f }, { 1.0f, 0.0f, 0.0f, 1.0f } },
{ { 0.5f, 0.5f, 0.0f, 1.0f }, { 0.0f, 1.0f, 0.0f, 1.0f } },
{ { -0.5f, -0.5f, 0.0f, 1.0f }, { 0.0f, 0.0f, 1.0f, 1.0f } },
{ { 0.5f, -0.5f, 0.0f, 1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }
};
Run Code Online (Sandbox Code Playgroud)
代替
Vertex* Vertices = rec->GetVertexData();
Run Code Online (Sandbox Code Playgroud)
(我手动检查了两个数组,它们具有完全相同的值,问题不在我的Rectangle的代码中)现在调用glBufferData(GL_ARRAY_BUFFER,BufferSize,Vertices,GL_STATIC_DRAW); 工作,我在屏幕上看到正确的矩形.使用gDebugger中的数据 …