小编Ale*_*lex的帖子

calloc()比malloc()&memset()慢

我想问你一个问题.我有以下代码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#define XXX 1024*1024

int main()
{
        int *p;
        unsigned long x=0;
        while (1)
        {
                //p = (int *) calloc (1,XXX);
                p = (int *) malloc (XXX);
                memset (p,0,XXX);
                x++;
                printf ("%lu MB allocated.\n",x);
                sleep (1);
        }
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我运行此代码,一切都正常运行.每秒,在内存中分配一个新的MB.我遇到的问题是如果我取消注释calloc()行并注释malloc()和memset()行.据我所知,calloc()应该在分配的内存中将所有字节初始化为零; 与malloc()和memset()相同的事情.

当我使用calloc()(没有malloc()和memset())运行代码时,分配初始1 MB(正常),然后在几秒(~10)之后分配另一个MB.

为什么会这样?

提前致谢!

c malloc memset calloc

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

SIGKILL init进程(PID 1)

关于将信号9(SIGKILL)发送到init进程(PID 1),我遇到了一个奇怪的问题.您可能知道,SIGKILL不能通过信号处理程序忽略.当我尝试将SIGKILL发送给init时,我发现没有发生任何事情; init不会被终止.试图弄清楚这种行为,我决定将自己附加到使用strace的init进程,也可以更清楚地看到发生了什么.现在是奇怪的部分.如果我用strace"查看"init进程并发送SIGKILL,系统崩溃了.

我的问题是为什么会发生这种情况?为什么在我查看流程时系统崩溃,为什么在我不这样做时它不会崩溃?正如我所说,在这两种情况下我都将SIGKILL发送给init.在CentOS 6.5,Debian 7和Arch上测试过.

谢谢!

unix signals pid init sigkill

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

不同的行为取决于架构

看来我在libc中遇到了一个可能的错误.我有以下代码:

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>

struct bla
{
    int a,b,c,d;
};

pthread_t tid;

void print (const char *s, const struct bla *fp);

void * thr_fn1 ( void * arg);

int main()
{
    struct bla *bla_main;

    pthread_create (&tid,NULL,thr_fn1,NULL);
    pthread_join (tid, (void *)  &bla_main);
    print ("Old thread: \n",bla_main);
    return 0;
}

void print (const char *s, const struct bla *bla_print)
{
    printf ("%s\n",s);
    printf ("Struct address: %p\n",bla_print);
    printf ("fp.a = %d\n",bla_print->a);
    printf ("fp.b = %d\n",bla_print->b);
    printf ("fp.c = …
Run Code Online (Sandbox Code Playgroud)

c linux malloc glibc

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

标签 统计

c ×2

malloc ×2

calloc ×1

glibc ×1

init ×1

linux ×1

memset ×1

pid ×1

sigkill ×1

signals ×1

unix ×1