小编nrm*_*mad的帖子

在x86-64中将寄存器移至自身会有什么好处

我正在x86-64 NASM中做一个项目,遇到了以下说明:

mov rdi, rdi
Run Code Online (Sandbox Code Playgroud)

我的教授在编译器的输出中写道。

我到处搜索,但是找不到为什么需要这样做的提法。它会影响标志,还是我不理解的聪明之处?

为了提供一些上下文,它在循环使用递减同一寄存器之前就存在于循环中sub

assembly x86-64 nasm

4
推荐指数
1
解决办法
179
查看次数

MongoDB Atlas 文本索引自动完成无法匹配

我在我的一个数据库集合上创建了一个文本索引,每个数据库集合都设置了自动完成功能。我索引的集合字段是名字、姓氏和电子邮件。以下是我用来创建文本索引的内容。它成功了:

 {
 "mappings": {
"dynamic": false,
"fields": {
  "email": [
    {
      "foldDiacritics": false,
      "maxGrams": 7,
      "minGrams": 3,
      "tokenization": "edgeGram",
      "type": "autocomplete"
    }
  ],
  "firstname": [
    {
      "foldDiacritics": false,
      "maxGrams": 7,
      "minGrams": 3,
      "tokenization": "edgeGram",
      "type": "autocomplete"
    }
  ],
  "surname": [
    {
      "foldDiacritics": false,
      "maxGrams": 7,
      "minGrams": 3,
      "tokenization": "edgeGram",
      "type": "autocomplete"
    }
  ]
}
}
}
Run Code Online (Sandbox Code Playgroud)

当我在 mongoDB shell 中运行以下查询时,我没有收到错误,但当姓氏字段与查询完全匹配时也没有结果:

db.users.aggregate([ { "$search": { "autocomplete": 
{ "query": "janson","path": "surname", "fuzzy": 
{ "maxEdits": 2, "prefixLength": 3 } } } }])
Run Code Online (Sandbox Code Playgroud)

我还尝试了索引中的所有三个集合字段: …

mongodb mongodb-atlas

4
推荐指数
1
解决办法
5134
查看次数

node.js nodemailer 和 nodemailer-sendinblue-transport 无法发送电子邮件

我已经使用 sendInBlue 创建了一个帐户,并将 nodemailer 和 nodemailer-sendinblue-transport 导入到我的项目中,我试图在其中发送一封简单的确认电子邮件。以下代码是我尝试设置的方式:

const transporter = nodemailer.createTransport(
  sendinblueTransport({
    auth: {
      apiKey: 'key'
    }
  })
);
Run Code Online (Sandbox Code Playgroud)

以下代码是我的注册方法中负责发送确认电子邮件的部分:

return transporter.sendMail({
  to: email,
  from: 'person@gmail.com',
  subject: 'Signup succeeded!',
  html: '<h1>You successfully signed up!</h1>'
});
Run Code Online (Sandbox Code Playgroud)

当我运行我的程序时,注册过程成功,但抛出以下错误而不是发送电子邮件:

错误:在数据库中找不到密钥(失败,401)

我读到他们的 v2 API 可能会贬值,但他们的客户支持成员说他们仍然为 nodemailer 提供支持,可能是什么问题?我也尝试过 sendGrid 和 Mandrill,但前者有一个非常有问题的网站,不允许我登录,后者需要一个活动域来发送电子邮件。

谢谢

node.js nodemailer

2
推荐指数
1
解决办法
2163
查看次数

C静态范围语义

我正在学习C并且遇到了这个程序.

#include <stdio.h>
int a, b, c = 0;
void prtFun (void);
int main ()
{
    static int a = 1; /* line 1 */
    prtFun();
    a += 1;
    prtFun();
    printf ( "n %d %d " , a, b) ;
}

void prtFun (void)
{
    static int a = 2; /* line 2 */
    int b = 1;
    a += ++b;
    printf (" n %d %d " , a, b);
}
Run Code Online (Sandbox Code Playgroud)

输出如下:

4 2
6 2
2 0
Run Code Online (Sandbox Code Playgroud)

它给出了以下解释

"'a'和'b'是全局变量.prtFun()也有'a'和'b'作为局部变量.局部变量隐藏全局变量(参见C中的Scope规则).当第一次调用prtFun()时,本地'b'变为2,本地'a'变为4.当第二次调用prtFun()时,使用相同的局部静态'a'实例,并创建'b'的新实例,因为'a'是static和'b'是非静态的.所以'b'再次变为2而'a'变为6. …

c

1
推荐指数
1
解决办法
84
查看次数

堆栈段C阵列

我在页面中遇到了一个示例,概述了在C结构中表示字符串的各种方法.它解释了在main之外的函数中定义的数组将存储在堆栈段中,因此在返回之后不一定存在可能导致运行时错误的数组.

突出显示为什么阵列失败返回时突出显示可能的重复因素返回的元素0返回的指针不再有效但是没有显示同一存储类别(自动)的原因变量是成功的,因为它们通过了移除的元素堆叠框架

"下面的程序可能会打印一些垃圾数据,因为字符串存储在函数getString()的堆栈帧中,并且在getString()返回后数据可能不存在."

char *getString() 
{ 
  char str[] = "GfG"; /* Stored in stack segment */

  /* Problem: string may not be present after getSting() returns */
  return str;  
}      
int main() 
{ 
  printf("%s", getString());   
  getchar(); 
  return 0; 
} 
Run Code Online (Sandbox Code Playgroud)

我知道其他本地C变量也将在它们各自的堆栈帧中定义,显然它们可以返回,所以为什么它是数组的问题?

谢谢

c

0
推荐指数
1
解决办法
72
查看次数

标签 统计

c ×2

assembly ×1

mongodb ×1

mongodb-atlas ×1

nasm ×1

node.js ×1

nodemailer ×1

x86-64 ×1