我想问你一个问题.我有以下代码:
#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.
为什么会这样?
提前致谢!
关于将信号9(SIGKILL)发送到init进程(PID 1),我遇到了一个奇怪的问题.您可能知道,SIGKILL不能通过信号处理程序忽略.当我尝试将SIGKILL发送给init时,我发现没有发生任何事情; init不会被终止.试图弄清楚这种行为,我决定将自己附加到使用strace的init进程,也可以更清楚地看到发生了什么.现在是奇怪的部分.如果我用strace"查看"init进程并发送SIGKILL,系统崩溃了.
我的问题是为什么会发生这种情况?为什么在我查看流程时系统崩溃,为什么在我不这样做时它不会崩溃?正如我所说,在这两种情况下我都将SIGKILL发送给init.在CentOS 6.5,Debian 7和Arch上测试过.
谢谢!
看来我在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)