1、问题1:g++与 gcc 的区别, g++能编译.c 文件吗? gcc 能编译.cpp 文件吗?
答:1) gcc 现在是 GNU 提供的一些编译器工具的集合(Gnu Compiler Collection),以前是 gnu 组织提供的 c 编译器(Gnu C Compiler)。
g++是 c++编译器编译器。
2) gcc 可以编译.c 和.cpp 的源文件,对*.c 按 c 语言语法规则处理, *.cpp 自动按 c++ 语法规则处理,但默认不链接相应的 c++库,需要手动指定链接的库名"-lstdc++"。gcc可以自行判断出当前程序所用的编程语言的类型。
3) g++可以编译.c 和.cpp 的源文件,但是都按 c++的语法标准编译文件。
2、 问题2:(1)申请了一块空间没有free,进程就结束了,那么空间被回收了吗?
答:(1)如果进程结束了,那么所有向操作系统申请的内存都会被回放(释放);
(2)malloc()申请1G的内存能否成功?判断依据是什么?3G呢?能否申请成功? printf("parent %s\n",buff); } close(fd); exit(0); }
答:(2)如果当前的物理内存剩余空间够用,那么申请的空间肯定能成功; 如果物理内存不够,先看有没有虚拟内存,如果有,看虚拟内存加上物理内存能否满足申 请的空间大小; sudo swapoff -a;关闭虚拟内存; sudo swapon -a;开启虚拟内存;
注意:3G,如果是32位操作系统是不能申请成功的;
(2)问题3:父进程堆区申请的空间复制后,子进程也会有一份,是否也需要释放?
答:需要释放;
可通过以下示范代码进行验证:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
#include <string.h>
int main()
{
char *s=(char *)malloc(128);
assert(s!=NULL);
pid_t pid=fork();
assert(pid=-1);
if(pid==0)
{
strcpy(s,"child");
}
else
{
strcpy(s,"parent");
}
printf("s=%s\n",s);
free(s);
exit(0);
}
如有错误,敬请指正。
您的收藏与点赞都是对我最大的鼓励和支持!