一、C/C++内存分配
C/C++语言中,内存主要分配在一下五个存储区:
1.栈:栈中存储局部变量以及函数实参, 由编译器负责分配释放,函数结束,栈中数据失效。
2堆:一般由程序员分配释放, 若程序员不释放,程序结束时可能由 OS 回收 。分配方式类似于链表。
3全局区/静态区:存放全局变量以及静态变量。程序一经编译好,该区域便存在。并且在C语言中初始化的全局变量和静态变量和未初始化的放在相邻的两个区域(在C++中,由于全局变量和静态变量编译器会给这些变量自动初始化赋值,所以没有区分了)。由于全局变量一直占据内存空间且不易维护,推荐少用。程序结束时释放。
4常量区:存放各种常量(const修饰以及字符串)。
5代码区:存放二进制代码。
二、栈和堆的区别
1.栈是系统提供的功能,特点是效率高,缺点是数据不灵活;堆是函数库提供的功能,数据适应面广,但是效率较低。
2.栈是系统数据结构,对于进程/线程是唯一的;堆是函数库内部结构,不一定唯一。
3.栈中数据分配与释放,由编译器自动完成;堆中需要手动完成。
4.栈向下生长,堆向上生长。
5.堆中会出现碎片,栈中不会,因为栈是后进先出的队列。
三、实例
int a = 0;// 全局初始化区
char *p1;// 全局未初始化区
int main(){
int b; // 栈
char s[] =\"abc\"; // 栈
char *p2;// 栈
char *p3 =\"123456\"; //123456\\0 在常量区, p3 在栈上。
static intc =0;// 全局(静态)初始化区
p1 = newchar[10];
p2 = newchar[20];
// 分配得来得和字节的区域就在堆区。
strcpy(p1,\"123456\"); //123456\\0 放在常量区,编译器可能会将它与 p3 所指向的 \"123456\" 优化成一个地方。
}
相关推荐
C/C++内存分配方式,堆区,栈区专题.rar
操作系统 动态 内存分配与回收 ,包含各种分配算法 c/c++
详细讲解C++内存分配的问题及C++与C分配内存的方式的不同,同时介绍在C++中分配内存的最佳方式。
深入详解c与c++内存分配问题,堆和栈的区别,以及指针的使用等。
根据生命周期结束后可以自动释放内存.严格来说是可以说半自动回收,个人原编,希望对大家有用,反正我是用的挺爽,创建内存方面,内存回收也干净.
C/C++ 开发必备 高质量C/C++编程 规范编程风格,内存分配,指针
本文首先总结了C和C++中动态内存分配函数的使用要点,然后总结并分析了 C+ + 中常见的内存错误,提出了一些解决对策和预防措施 ,最后通过加入检测区域、重载new操作符来完成C++程序中部分内存越界问题的检测。
其中,空闲分区通过空闲分区链表来管理,分别采用首次适应算法、循环首次适应算法、最佳适应算法、最坏适应算法进行内存块的分配和回收,同时显示内存块分配和回收后空闲内存分区链的情况。 基本功能:设计与实现...
#include <stdlib.h> //定义杂项函数及内存分配函数 #include <string.h> //字符串处理 #include <strstrea.h> //基于数组的输入/输出 #include <time.h> //定义关于时间的函数 #include <wchar.h> //宽字符...
面试题18:简述C、C++程序编译的内存分配情况 面试题19:以下四段代码中哪段没有错误 第6章 字符串 6.1 数字字符串 面试题1:编码实现数字转化为字符串 面试题2:编码实现字符串转化为数字 6.2 字符串函数 面试题3:...
C,C++内存分配的详细讲解包括堆,栈,数据段的分配管理
这篇资料详细分析了如何在嵌入式系统中编写安全,健壮的 c/c++代码
C 语言内存管理指对系统内存的分配、创建、使用这一系列操作。在内存管理中,由于是操作系统内存,使用不当会造成毕竟麻烦的结果。本文将从系统内存的分配、创建出发,并且使用例子来举例说明内存管理不当会出现的...
C/C++常见的分配释放内存操作过程需要注意的细节问题,以及一些关键字的用法意义
通过例子解析指针引用及动态内存分配觉得有用看好再下
答:函数和变量被C++编译后在符号库中的名字与C语言的不同,被extern "C"修饰的变 量和函数是按照C语言方式编译和连接的。由于编译后的名字不同,C++程序不能直接调 用C 函数。C++提供了一个C 连接交换指定符号...
c/c++编程规范 内容包括 注释添加规范,内存分配规则,出错信息处理,函数传值和传指针,etc.
一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, ...
1. malloc()函数1.1 malloc的全称是memory allocation,中文叫动态内存分配。原型:extern void *malloc(unsigned int num_bytes); 说明:分配长度为num_bytes字节的内存块。如果分配成功则返回指向被分配内存的指针...
一、C/C++程序的内存分配 一个C/C++程序占用的内存区一般可以分为如下五种: ①全局/静态数据区 ②常量数据区 ③代码区 ④堆 ⑤栈 显然代码存放在代码区,而程序的数据则根据数据种类的不同放在...