小编man*_*m-n的帖子

什么是C中的&&&操作

#include <stdio.h>

volatile int i;

int main()
{
    int c;

    for (i = 0; i < 3; i++) 
    {
         c = i &&& i;
         printf("%d\n", c);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面编译的程序的输出gcc

0
1
1
Run Code Online (Sandbox Code Playgroud)

使用-Wall-Waddress选项,gcc发出警告:

warning: the address of ‘i’ will always evaluate as ‘true’ [-Waddress]
Run Code Online (Sandbox Code Playgroud)

如何c在上述计划中进行评估?

c c++ operators gcc-warning compiler-optimization

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

C宏定义确定大端或小端机?

是否有一行宏定义来确定机器的字节顺序.我使用以下代码,但将其转换为宏将太长.

unsigned char test_endian( void )
{
    int test_var = 1;
    unsigned char test_endian* = (unsigned char*)&test_var;

    return (test_endian[0] == NULL);
}
Run Code Online (Sandbox Code Playgroud)

c architecture macros endianness

101
推荐指数
13
解决办法
9万
查看次数

FIQ和IRQ中断系统有什么区别?

我想知道任何微处理器中FIQ和IRQ中断系统之间的区别,例如:ARM926EJ.

drivers arm interrupt isr microprocessors

69
推荐指数
5
解决办法
9万
查看次数

malloc(0)返回什么?

什么malloc(0)回报?答案是否相同realloc(malloc(0),0)

#include<stdio.h>
#include<malloc.h>
int main()
{
        printf("%p\n", malloc(0));
        printf("%p\n", realloc(malloc(0), 0));
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

linux gcc的输出:

manav@manav-workstation:~$ gcc -Wall mal.c
manav@manav-workstation:~$ ./a.out
0x9363008
(nil)
manav@manav-workstation:~$
Run Code Online (Sandbox Code Playgroud)

输出每次都在变化malloc(0).这是标准答案吗?除了学术研究之外,为什么有人会对获得这样的指针感兴趣?

编辑:

如果malloc(0)返回虚拟指针,那么后续工作原理如何:

int main()
{
    void *ptr = malloc(0);
    printf("%p\n", realloc(ptr, 1024));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编辑:

以下代码为每次迭代输出"可能".为什么不失败?

#include<stdio.h>
#include<malloc.h>
int main()
{

        int i;
        void *ptr;
        printf("Testing using BRUTE FORCE\n");
        for (i=0; i<65000; i++)
        {
                ptr = malloc(0);
                if (ptr == realloc(ptr, 1024))
                        printf("Iteration %d: possible\n", …
Run Code Online (Sandbox Code Playgroud)

c linux malloc pointers realloc

53
推荐指数
5
解决办法
3万
查看次数

什么是scanf("%*s")和scanf("%*d")格式标识符?

"%*"scanf()中格式的实际用途是什么.如果存在这种格式,则必须有一些目的.以下程序给出了奇怪的输出.

#include<stdio.h>
int main()
{
        int i;
        char str[1024];

        printf("Enter text: ");
        scanf("%*s", &str);
        printf("%s\n", str);

        printf("Enter interger: ");
        scanf("%*d", &i);
        printf("%d\n", i);
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

manav@workstation:~$ gcc -Wall -pedantic d.c
d.c: In function ‘main’:
d.c:8: warning: too many arguments for format
d.c:12: warning: too many arguments for format
manav@manav-workstation:~$ ./a.out
Enter text: manav
D
Enter interger: 12345
372
manav@workstation:~$
Run Code Online (Sandbox Code Playgroud)

c formatting scanf

44
推荐指数
4
解决办法
7万
查看次数

找到j和i索引之间的最大差异,使得在U(n)中j> i和a [j]> a [i]

给定一个排序的数组,找到max j - i这样指数之间的差异j > i,并a[j] > a[i]O(n).我能够在复杂性中找到ji使用琐碎的方法,O(n^2)但想知道如何做到这一点O(n)

输入:{9,2,3,4,5,6,7,8,18,0}

输出:8(j = 8,i = 0)

输入:{1,2,3,4,5,6}

输出:5(j = 5,i = 0)

sorting algorithm data-structures

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

Linux 3.2内核与2.6内核接受不良平衡的套接字

我正在运行一个相当大规模的Node.js 0.8.8应用程序,使用带有16个工作进程的Cluster,在具有超线程的16处理器盒子上(所以32个逻辑核心).我们发现自从迁移到Linux 3.2.0内核(从2.6.32开始)以来,工作者子进程之间的传入请求的平衡似乎被大量加权到5个左右的进程,而其他11个进程根本没有做太多工作.这可能对吞吐量更有效,但似乎增加了请求延迟并且对我们来说不是最佳的,因为其中许多是长期的websocket连接,可以同时开始工作.

子进程都在套接字上接受(使用epoll),虽然这个问题在Node 0.9(https://github.com/bnoordhuis/libuv/commit/be2a2176ce25d6a4190b10acd1de9fd53f7a6275)中有一个修复,但该修复似乎没有帮助我们的测试.是否有人知道内核调优参数或构建选项可能有所帮助,或者我们最好使用不同的方法回到2.6内核或跨工作进程进行负载平衡?

我们将其归结为一个简单的HTTP Siege测试,但请注意,这是在带有超线程的12核盒子上进行12次触发(因此有24个逻辑核心),并且有12个工作进程在套接字上接受,而不是我们的16在生产过程中.

在Debian Squeeze上使用Node 0.9.3进行HTTP Siege,在裸机上使用2.6.32内核:

reqs pid
146  2818
139  2820
211  2821
306  2823
129  2825
166  2827
138  2829
134  2831
227  2833
134  2835
129  2837
138  2838
Run Code Online (Sandbox Code Playgroud)

除了3.2.0内核以外的一切:

reqs pid
99   3207
186  3209
42   3210
131  3212
34   3214
53   3216
39   3218
54   3220
33   3222
931  3224
345  3226
312  3228
Run Code Online (Sandbox Code Playgroud)

linux kernel epoll http node.js

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

为什么inode数字从1开始而不是0?

C语言约定从0开始计算数组索引.为什么inode数从1开始而不是0?

如果inode 0被保留用于某些特殊用途,那么inode 0的意义是什么?

c linux filesystems inode superblock

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

SoftIRQ和Tasklet之间的区别

在研究Linux中断处理时,我发现Tasklets和SoftIRQ是执行"下半部分"(较低优先级工作)的两种不同方法.我理解这一点(非常真实的需要).

不同的是,SoftIRQ是重要的,而Tasklet则不是.同样的SoftIRQ可以在不同的CPU上运行,而Tasklets不是这种情况.

虽然我从表面上理解这一点,但我无法理解这两个特征的要求.在什么情况下我们可以使用这些设施?如何识别我现在应该使用Tasklets和SoftIRQs.

另外,Tasklets是在SoftIRQ上制作的?在我用LKML阅读的一本书中,有关删除Tasklets的争论.我完全搞砸了为什么要引入这样的功能?一些短视(没有冒犯意味着)?

任何关于此的指示都会有所帮助.

linux-kernel interrupt-handling softirq tasklet

21
推荐指数
2
解决办法
3万
查看次数

每个线程都有自己的堆栈吗?

当我从进程创建多个线程时,每个线程是否都有自己的堆栈,或者它们是否共享其父进程的堆栈.线程进行系统调用时会发生什么?线程是否也像进程一样维护自己的内核堆栈?

c c++ stack multithreading pthreads

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