小编Poo*_*oya的帖子

为什么它使用movl而不是push?

注意这段代码:

#include <stdio.h>
void a(int a, int b, int c)
{
    char buffer1[5];
    char buffer2[10];
}

int main()
{
    a(1,2,3); 
}
Run Code Online (Sandbox Code Playgroud)

之后 :

gcc -S a.c
Run Code Online (Sandbox Code Playgroud)

该命令在程序集中显示我们的源代码.

现在我们可以在main函数中看到,我们从不使用"push"命令将函数的参数压入堆栈.它用"movel"而不是那个

main:
 pushl %ebp
 movl %esp, %ebp
 andl $-16, %esp
 subl $16, %esp
 movl $3, 8(%esp)
 movl $2, 4(%esp)
 movl $1, (%esp)
 call a
 leave
Run Code Online (Sandbox Code Playgroud)

为什么会这样?他们之间有什么区别?

c assembly gcc callstack calling-convention

17
推荐指数
3
解决办法
4259
查看次数

无法使用SIGKILL杀死docker容器中的pid 1

有一个原因,我想杀死docker容器中的主要python进程(PID 1).但非终止信号,比如SIGTERM,SIGKILL工作.我的意思是,跑步kill -SIGKILL 1没有效果.如何从容器内部杀死pid 1 ?我不想运行docker stop或类似的解决方案.

python signals docker

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

为什么参数的顺序在这里很重要?

据我记得,命令参数的顺序并不重要,但在这里我看到了其他东西:

ffmpeg -f avi -i "s02e01.mkv" vcodec mpeg4 -b 4000k -acodec libmp3lame -ab 320k "converted.avi" 
Run Code Online (Sandbox Code Playgroud)

这是结果:

s02e01.mkv: Operation not permitted
Run Code Online (Sandbox Code Playgroud)

但在更改“-f”和“-i”的位置后,一切正常:

ffmpeg -i "s02e01.mkv" -f avi vcodec mpeg4 -b 4000k -acodec libmp3lame -ab 320k "converted.avi" 
Run Code Online (Sandbox Code Playgroud)

这里有什么问题?

shell ffmpeg

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

rapidjson提取关键和价值

我正在尝试提取数组中的键和对象的值,但找不到合适的getter:

 for (Value::ConstValueIterator itr = document["params"].Begin(); itr != document["params"].End(); ++itr)
{
    for (Value::MemberIterator m = itr->MemberBegin(); m != itr->.MemberEnd(); ++m) {

    }       
}
Run Code Online (Sandbox Code Playgroud)

在第二个循环中,我想分别从迭代器中提取键和值.怎么做提取?

c++ json rapidjson

5
推荐指数
2
解决办法
7386
查看次数

为什么这个变量不会改变?

在这段代码中:

function change(s)
{
  var number = s.replace(/\s+/g, '');
  for(var i = 0; i < number.length ; i++)
  {
    console.log(number[i]); //Line1
    number[i] = '1';
    console.log(number[i]); //Line2
  }
}
Run Code Online (Sandbox Code Playgroud)

Line1和Line2的结果都是一样的(它们返回"2")!这里发生了什么?!

javascript

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

C循环移位的错误答案

右移的实施是:

unsigned int rotr(unsigned int value, int shift) {
    return (value >> shift) | (value << (sizeof(value) * 8 - shift));
}
Run Code Online (Sandbox Code Playgroud)

但如果价值是0x17=00010111结果应该0x8b=10001011但结果是0x8000000b.

怎么处理这个问题?

#include <stdio.h>
unsigned int rotr(unsigned int value,int shift) {
    return (value >> shift) | (value << (sizeof(value) * 8 - shift));
}
int main()
{
  unsigned int a = 0x17;
  printf("%x",rotr(a,(unsigned)1));
}

=> 8000000b
Run Code Online (Sandbox Code Playgroud)

c bit-manipulation shift

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

如何在Artifactory本地存储库中缓存远程包?

我使用Artifactory在我的服务器上设置本地存储库,让客户端从中下载Java包.
我为它部署了一个jar文件,客户端能够从服务器获取jar文件.

如果客户端请求包并且它在本地存储库中不存在,本地存储库是否从中央存储库下载它并将其缓存以进一步请求?我该如何确保?它在哪里保存这些包裹?我没有在默认的存储库中找到它.
BTW,默认情况下是启用此功能还是我们应该配置Artificatory以启用此功能?



更新:
我监视请求日志,如果存储库中存在包,用户可以下载它,GET请求状态为200.但是当存储库中不存在包时,GET请求将响应404,并且我们期望应将包下载到本地存储库以进一步请求.但它仍然响应404,这意味着它没有缓存包,用户直接从中央存储库下载它而不通过我们的本地存储库.

java artifacts artifactory maven

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

数组指针的影响

当我们有:

#include <iostream>
using namespace std;

int main()
{
    int a[100];
    cout << a[0] << endl;
}
Run Code Online (Sandbox Code Playgroud)

我得到"1".

但是当我改变它时:

#include <iostream>
using namespace std;

int main()
{
    int a[100];
    int* b = &a[0];
    cout << a[0] << endl;
    cout << *b << endl;     
}
Run Code Online (Sandbox Code Playgroud)

我得到类似"-1219451320"的东西,每次运行后都会改变.

b变量的影响是如何a[0]改变的?例如,现在,如果我将其更改为以前的代码,结果将再次为"1".

在这两个状态中,数组都没有初始化!所以不应该有这样的差异.例如在第一个代码中,如果我们得到"-12242311231",它就不会奇怪但现在......

c++ memory arrays pointers

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

为什么内核#p在标准输出上复制我的文本?

看看这段代码:

def hello
   p "Hey!"
end
p hello
Run Code Online (Sandbox Code Playgroud)

输出将是:

"Hey!"
"Hey!"
=> "Hey!"
Run Code Online (Sandbox Code Playgroud)

所以这是我的结论:put本身返回将在Ruby代码中输出的文本,否则它不会打印"嘿!" 再次.打印字符串时发生了什么?如果puts不直接将它发送到标准输出,谁负责它以及如何?

ruby io

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