一些碎知识点

2017-04-05  本文已影响0人  安然_fc00

1. 几种生成空指针的方法:

int *p1=nullptr;//等价于int *p1=0;C++11引入的,建议使用
int *p2=0;//直接将p2初始化为字面常量0
//需要首先#include cstdlib
int *p3=NULL;//等价于int *p3=0;

2. main函数执行以前及以后,分别还会执行什么代码?

(1). 一些全局变量、对象和静态变量、对象的空间分配和赋初值在main之前,main之后还要执行一些诸如释放空间、释放资源使用权等操作。
(2). 全局对象的构造函数在main之前执行,析构函数在main之后执行。
(3). main函数之后会执行atexit注册的函数。

3. C\C++程序编译的内存分配情况

一个C/C++程序编译时内存分为5大存储区:堆区、栈区、全局区、程序代码区、文字常量区。
(1). 程序代码区。代码要执行,肯定要将代码的二进制文件加载进内存。
(2). 字符串常量区。

char *s1="hello";
char *s2="hello";

这样定义字符串时,s1是等于s2的,意思是两者指向同一字符串,该字符串在字符串常量区。
C/C++内存分配方式有3种
(1). 从静态存储区分配:
内存在程序编译时就已经分配好,这块内存在程序的整个运行期间都存在。速度快、不容易出错,因为有系统会善后。例如全局变量,static变量等。
(2). 在栈上分配:
在执行函数时,函数内局部变量的存储单元都在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
(3). 从堆上分配:
即动态内存分配。程序在运行的时候用malloc或new申请任意大小的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由程序员决定,使用非常灵活。如果在堆上分配了空间,就有责任回收它,否则运行的程序会出现内存泄漏,另外频繁地分配和释放不同大小的堆空间将会产生堆内碎块。

4. #include<>与“ ”

在C程序中包含文件有以下两种方法:

上一篇 下一篇

猜你喜欢

热点阅读