我是靠谱客的博主 威武树叶,最近开发中收集的这篇文章主要介绍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 %sn",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=%sn",s);
free(s);
exit(0);
}

如有错误,敬请指正。

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

 

最后

以上就是威武树叶为你收集整理的Linux——习题(g++与gcc的区别?申请虚拟空间(虚拟内存))的全部内容,希望文章能够帮你解决Linux——习题(g++与gcc的区别?申请虚拟空间(虚拟内存))所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部