Linux——习题(g++与gcc的区别?申请虚拟空间(虚拟内存))

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);
}

如有错误,敬请指正。

您的收藏与点赞都是对我最大的鼓励和支持!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sweep-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值