注意这段代码:
#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)
为什么会这样?他们之间有什么区别?
有一个原因,我想杀死docker容器中的主要python进程(PID 1).但非终止信号,比如SIGTERM,SIGKILL工作.我的意思是,跑步kill -SIGKILL 1没有效果.如何从容器内部杀死pid 1 ?我不想运行docker stop或类似的解决方案.
据我记得,命令参数的顺序并不重要,但在这里我看到了其他东西:
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)
这里有什么问题?
我正在尝试提取数组中的键和对象的值,但找不到合适的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)
在第二个循环中,我想分别从迭代器中提取键和值.怎么做提取?
在这段代码中:
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")!这里发生了什么?!
右移的实施是:
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) 我使用Artifactory在我的服务器上设置本地存储库,让客户端从中下载Java包.
我为它部署了一个jar文件,客户端能够从服务器获取jar文件.
如果客户端请求包并且它在本地存储库中不存在,本地存储库是否从中央存储库下载它并将其缓存以进一步请求?我该如何确保?它在哪里保存这些包裹?我没有在默认的存储库中找到它.
BTW,默认情况下是启用此功能还是我们应该配置Artificatory以启用此功能?
更新:
我监视请求日志,如果存储库中存在包,用户可以下载它,GET请求状态为200.但是当存储库中不存在包时,GET请求将响应404,并且我们期望应将包下载到本地存储库以进一步请求.但它仍然响应404,这意味着它没有缓存包,用户直接从中央存储库下载它而不通过我们的本地存储库.
当我们有:
#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",它就不会奇怪但现在......
看看这段代码:
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不直接将它发送到标准输出,谁负责它以及如何?