小编jch*_*jch的帖子

参数声明为restrict和编译器警告

gcc 5和clang 3.6都不会在restrict限定符的约束被违反的情况下发出警告,即使在调用时也是如此-Wall.请考虑以下代码片段:

extern void f(char *restrict p, char *restrict q);

void g(char *p)
{
    f(p, p);
}
Run Code Online (Sandbox Code Playgroud)

天真地,我希望可以静态地确定违规行为,我期待这-Wall会发出警告.我在某个地方错过了一面旗帜,还是在发出一些我没有看到警告的问题?

c c99 restrict c11 restrict-qualifier

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

为什么伊德里斯需要相互的?

为什么Idris要求函数按照它们的定义顺序出现并且相互递归声明mutual

我希望Idris在函数之间执行依赖性分析的第一遍,并自动重新排序.我一直相信Haskell会这样做.为什么在伊德里斯这不可能?

idris

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

C11 stdatomic和calloc

我有一个包含原子场的结构:

#include <stdatomic.h>

struct s {
    ...
    atomic_int a;
};
Run Code Online (Sandbox Code Playgroud)

该结构分配有calloc:

struct s *p = calloc(1, sizeof(struct s));
Run Code Online (Sandbox Code Playgroud)

是否可以预期p->a初始化为0?代码中有足够的障碍,因此初始化很弱,但是初始值是否保证为0?

c atomic c11

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

Golang中Tor的TCP连接

可以通过tor网络启动TCP连接吗?我环顾四周但没有找到它.

如果没有,是否有类似TCP的东西 - 像websockets - 可以用来代替?

注意:目前没有源代码供我发帖,因为还没有.这只是事先的研究.

tcp tor go

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

两个类似的汇编代码.实质性的差异

我有常春藤桥CPU.以下代码每次迭代需要3个周期:

L1:    
    movapd xmm1, [rsi+rax] ; X[i], X[i+1]
    mulpd xmm1, xmm2
    movapd xmm0, [rdi+rax] ; Y[i], Y[i+1]
    subpd xmm0, xmm1
    movapd [rdi+rax], xmm0 ; Store result
    add rax, 16
    cmp rax, rcx
    jl L1
Run Code Online (Sandbox Code Playgroud)

以下每次迭代需要9个周期:

L1:
    movapd xmm1, [rsi+rax] ; X[i], X[i+1]
    mulpd xmm1, xmm2
    movapd xmm0, [rdi+rax] ; Y[i], Y[i+1]
    add rax, 16
    subpd xmm0, xmm1
    movapd [rdi+rax], xmm0 ; Store result
    cmp rax, rcx
    jl L1
Run Code Online (Sandbox Code Playgroud)

唯一的区别是order(add rax, 16).并且它导致程序慢3倍.为什么差异如此之大?

optimization x86

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

标签 统计

c ×2

c11 ×2

atomic ×1

c99 ×1

go ×1

idris ×1

optimization ×1

restrict ×1

restrict-qualifier ×1

tcp ×1

tor ×1

x86 ×1