小编apa*_*ana的帖子

Linux 内核和 GNU C 库之间的关系是什么?

我们知道 Linux 内核是用 C 编写的。但它是否也调用了标准 C 函数,malloc()或者像mmap()GNU C 库(glibc)提供的额外函数?在那种情况下,这很奇怪,因为与硬件的直接低级交互,例如内存管理,应该几乎总是内核的任务。那么,哪个依赖于另一个?哪个更基本/低级?

c linux glibc linux-kernel

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

MPI_Abort() 与 exit()

有什么充分的理由选择

MPI_Abort(MPI_COMM_WORLD, MY_ERROR_CODE);
Run Code Online (Sandbox Code Playgroud)

到

exit(MY_ERROR_CODE);
Run Code Online (Sandbox Code Playgroud)

在用 C 编写的基于 MPI 的并行代码中?到目前为止我从未使用过前者。

c mpi abort

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

什么时候使用 MPI_BUFFER_ATTACH?

据我所知,如果要进行缓冲通信,则必须由进程调用 MPI_BUFFER_ATTACH。但这是否也包括标准的 MPI_SEND ?我们知道 MPI_SEND 可能表现为同步发送或缓冲发送。

mpi

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

gcc 总是做这种优化吗?(公共子表达式消除)

例如,假设表达式sys->pot.atoms[item->P.kind].mass在循环内计算。循环只改变item,所以表达式可以简化为在循环之前atoms[item->P.kind].mass定义一个变量atoms = sys->pot.atoms。像 gcc 这样的现代编译器是否会自动执行这种优化(如果启用了优化)?无论atoms[item->P.kind].mass循环中存在的表达式数量如何,它都可靠吗?

c optimization gcc

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

如何在 C 中使用 bool 进行文件 I/O?

在进行文件 I/O 时,我应该bool像对待变量一样对待变量吗? 我的意思是使用以下代码片段是否正确?int

bool b = true;
FILE *fp1, *fp2;
...
fprintf(fp1, "%d", b);
fscanf(fp2, "%d", &b);

Run Code Online (Sandbox Code Playgroud)

我想知道基于 ISO C 规范的答案。

c c11

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

将 double 转换为 float 时会发生什么?

假设最接近 double 值的浮点值d是f1and f2,因此f1< d< f2。d在 C99中强制转换为 float的结果是什么?f1或者f2?考虑以下两种情况:

  1. 如果 d - f1 > f2 - d
  2. 如果 d - f1 < f2 - d

我假设 d 本身不能由任何浮点值精确表示。

c floating-point casting

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

应该给编译器留下哪些优化?

假设您选择了最有效的算法来解决性能优先的问题,现在您正在实施它,您必须决定如下细节:

v[i*3+0],v[i*3+1]并v[i*3+2]包含粒子速度的分量i,我们要计算总动能。假设所有粒子都具有相同的质量,人们可以写:

inline double sqr(double x)
{
    return x*x;
}

double get_kinetic_energy(double v[], int n)
{
    double sum = 0.0;

    for (int i=0; i < n; i++)
        sum += sqr(v[i*3+0]) + sqr(v[i*3+1]) + sqr(v[i*3+2]);

    return 0.5 * mass * sum;
}
Run Code Online (Sandbox Code Playgroud)

为了减少乘法次数,可以写成:

double get_kinetic_energy(double v[], int n)
{
    double sum = 0.0;

    for (int i=0; i < n; i++)
    {
        double *w = v + i*3;
        sum += sqr(w[0]) + sqr(w[1]) + sqr(w[2]); …
Run Code Online (Sandbox Code Playgroud)

c optimization

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

是否有一个版本的sscanf()不能从第一个字节开始?

在C中,fscanf()不一定从第一个字节读取文件; 它从当前访问位置读取文件.我需要一个sscanf()与字符串相同的版本.是否有任何功能(标准或非标准)用于此目的?

更新:似乎我没有很好地提出这个问题.我不知道这种sscanf()应该开始读取的地方/偏移的数值; 我想让它从之前调用它的地方读完.谢谢.

c

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

是int还是char?哪个更快?

我的C程序在内存中存储许多整数值,并读取它们并经常对其进行比较。类型的范围unsigned char是足够的,但是我使用它int是因为速度对我来说比内存消耗重要得多,而且我认为CPU的工作int速度可能更快。但这只是直觉的粗略猜测,我不确定。

c performance

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

标签 统计

c ×8

mpi ×2

optimization ×2

abort ×1

c11 ×1

casting ×1

floating-point ×1

gcc ×1

glibc ×1

linux ×1

linux-kernel ×1

performance ×1