C语言之内存
#include <stdio.h>
#include <string.h>
int a = ; //全局初始化区
char *p1; //全局未初始化区
int main()
{
/*************************************************************
* C语言变量声明及内存分配
*
* 一个由C/C++编译的程序占用的内存分为以下几个部分
*
* 1、栈区(stack)
* 程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等。
* 其操作方式类似于数据结构中的栈。程序结束时由编译器自动释放。
*
* 2、堆区(heap)
* 在内存开辟另一块存储区域。一般由程序员分配释放,若程序员不释放,
* 程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方
* 式倒是类似于链表。
*
* 3、全局区(静态区)(static)
* 编译器编译时即分配内存。全局变量和静态变量的存储是放在一块的,
* 初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初
* 始化的静态变量在相邻的另一块区域(BSS)。程序结束后由系统释放
*
* 4、文字常量区:
* 常量字符串就是放在这里的,程序结束后由系统释放。
*
* 5、程序代码区:
* 存放函数体的二进制代码。
*
* 内存分配方式:
* 内存分配方式有三种:
* 1、从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在
* 程序的整个运行期间都存在。例如全局变量,static变量。
*
* 2、在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,
* 函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的
* 指令集中,效率很高,但是分配的内存容量有限。
*
* 3、从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new
* 申请任意多少的内存,程序员自己负责在何时用free或delete释放内
* 存。动态内存的生存期由程序员决定,使用非常灵活,但如果在堆上分配了
* 空间,就有责任回收它,否则运行的程序会出现内存泄漏,频繁地分配和释
* 放不同大小的堆空间将会产生堆内碎块。
*************************************************************/
int b=; // 栈
char s[] = "abc"; //栈
char *p2; //栈
char *p3 = ""; //"123456\0"在常量区,p3在栈上。
static int c =; // 全局(静态)初始化区
p2 = (char *)malloc(); //分配得来的20字节的区域就在堆区。
//123456\0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方
strcpy(p1, "");
free(p2);
system("pause");
return ;
}
C语言之内存的更多相关文章
- C语言中内存的申请函数
C语言跟内存申请相关的函数主要有 alloca,calloc,malloc,free,realloc,sbrk等. alloca是向栈申请内存,因此无需释放. malloc分配的内存是位于堆中的,并且 ...
- JVM内存管理------JAVA语言的内存管理概述
引言 内存管理一直是JAVA语言自豪与骄傲的资本,它让JAVA程序员基本上可以彻底忽略与内存管理相关的细节,只专注于业务逻辑.不过世界上不存在十全十美的好事,在带来了便利的同时,也因此引入了很多令人抓 ...
- 不可或缺 Windows Native (9) - C 语言: 动态分配内存,链表,位域
[源码下载] 不可或缺 Windows Native (9) - C 语言: 动态分配内存,链表,位域 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 动态分配内存 链 ...
- c语言之内存的申请malloc() 和释放free()
c语言之内存的申请malloc() 和释放free() 1.如何使用 malloc 函数 malloc是一个函数,专门用来从堆上分配内存.使用malloc函数需要几个要求: 内存分配给谁?分配多大内存 ...
- C语言的内存管理
C语言的内存管理 转载:http://blog.csdn.net/wind19/article/details/5964090 对于一个C语言程序而言,内存空间主要由五个部分组成代码段(.text ...
- (十一)C语言中内存堆和栈的区别
在计算机领域,堆栈是一个不容忽视的概念,我们编写的C语言程序基本上都要用到.但对于很多的初学着来说,堆栈是一个很模糊的概念. 堆栈:一种数据结构.一个在程序运行时用于存放的地方,这可能是很多初学者的认 ...
- C语言堆内存管理上出现的问题,内存泄露,野指针使用,非法释放指针
C语言堆内存管理上出现的问题,内存泄露,野指针使用,非法释放指针 (1)开辟的内存没有释放,造成内存泄露 (2)野指针被使用或释放 (3)非法释放指针 (1)开辟的内存没有释放.造成内存泄露,以下的样 ...
- C语言中内存分配 (转)
在任何程序设计环境及语言中,内存管理都十分重要.在目前的计算机系统或嵌入式系统中,内存资源仍然是有限的.因此在程序设计中,有效地管理内存资源是程序员首先考虑的问题. 第1节主要介绍内存管理基本概念,重 ...
- 【转】C语言中内存分配
原文:C语言中内存分配 在任何程序设计环境及语言中,内存管理都十分重要.在目前的计算机系统或嵌入式系统中,内存资源仍然是有限的.因此在程序设计中,有效地管理内存资源是程序员首先考虑的问题. 第1节主要 ...
- C语言程序内存布局
C语言程序内存布局 如有转载,请注明出处:http://blog.csdn.net/embedded_sky/article/details/44457453 作者:super_bert@csdn 一 ...
随机推荐
- 27-python基础-python3-异常处理(try except)
到目前为止,在 Python 程序中遇到错误,或“异常”,意味着整个程序崩溃.不希望这发生在真实世界的程序中. 相反,希望程序能检测错误,处理它们,然后继续运行. 实例1: 当试图用一个数除以零时 ...
- ios兼容问题
滑动卡顿: -webkit-overflow-scrolling:touch;
- python图像、视频转字符画
python图像转字符画需要用到matplotlib.pyplot库,视频转字符画需要用到opencv库,这里的代码基于python 3.5 图像转字符画需要先将图像转为灰度图,转灰度图的公式是 gr ...
- 自定义servlet重写doGet或者doPost方法时,405 method not allowed
自定义servlet public class TestServlet extends HttpServlet { @Override protected void doGet(HttpServlet ...
- Docker-搭建Docker Registry
私有Docker Registry的部署和配置 从Docker Hub上可以获取官方的Registry的镜像,Registry 默认的对外服务端口是 5000,如果我们宿主机上运行的 Registry ...
- Codeforces 1156C 尺取法 / 二分
题意:给你一个数组,问里面最多能匹配出多少对,满足abs(a[i] - a[j]) >= k; 思路:首先肯定要排序. 思路1(尺取法):看了dreamoon的代码明白的.我们可以寻找一个最长的 ...
- 创建win32 dll 空项目
动态库,多字节 win32 空项目 添加导出头文件 类 导入: #pragma once #ifndef IP_CLASS_DLL_H #define IP_CLASS_DLL_H #pragma ...
- (PASS)break 和 continue 的区别
1 break; while循环中,break是用于永久终止循环.即不执行本次循环中break后面的语句,直接跳出循环. 终止,跳出,结束循环(可以作用在任何地方).也常与switch分支结构合用 ...
- PHP-缺失的第一个正数
给定一个未排序的整数数组,找出其中没有出现的最小的正整数. 示例 1: 输入: [1,2,0]输出: 3示例 2: 输入: [3,4,-1,1]输出: 2示例 3: 输入: [7,8,9,11,12] ...
- CF687D Dividing Kingdom II
\(\mathtt{CF 687D}\) \(\mathcal{Description}\) 给你一个图有 \(n\) 个点 \((1 \leq n \leq 10^3)\) 和 \(m\) 条边 \ ...