C Language Study - 内存分区

静态区:保存自动全局变量和static变量(包括static全局和局部变量)。静态区的内容在整个程序的生命周期内都存在,由编译器在编译的时候分配。

栈(stack):保存局部变量。栈上的内容只在函数范围内存在,当函数运行结束,这些内容自动被销毁,其特点是效率高,但可操作空间大小有限。

堆(heap):由malloc系列函数或new操作符分配的内存。其生命周期由free或delete决定。在没有释放之前一直存在,直到程序结束。其特点是使用灵活,

空间范围大,易出错。

时间: 2024-12-07 07:29:27

C Language Study - 内存分区的相关文章

C Language Study - 内存分配的一个奇异之处

在复制字符串的时候,出现如下难以理解之处: 测试程序的目的是定义一个指针指向字符串常量,并且将这个字符串常量复制到另一个经过内存分配的字符串指针. 正常理解范围(1): #include <stdio.h> #include <string.h> #include <malloc.h> int main(void) { char* p1 = "abcdefg"; char* p2 = (char*)malloc(sizeof(p1));//pass

iOS 中内存分区

1  关于RAM ROM 我们知道,内存为RAM类型不具备掉电存储能力(即一掉电数据全没了),所以app程序一般存放于内存卡(Flash)或ROM中.RAM的访问速度要远高内存卡(Flash)或ROM. 2  当启动一个app 为了加快程序执行速度,系统会把开启的那个app程序从Flash或ROM里面拷贝到内存(RAM),然后从内存里面执行代码.另一个原因是CPU不能直接从内存卡里面读取指令(需要Flash驱动等等). 3  内存分区:可以分为5个区 1).栈区(stack)— 这个一般由编译器

C Language Study - the use of symbol &#39;##&#39;

## #include <stdio.h> #define INTVARIABLE(n) i##n int main(void) { int INTVARIABLE(2) = 3; printf("i2=%d\n",i2);//output i2=3 i2 = 5; printf("i2=%d\n",i2);//output i2=5 return 0; } C Language Study - the use of symbol '##'

c语言学习之基础知识点介绍(十八):几个修饰关键字和内存分区

一.几个修饰关键字 全局变量: 全局变量跟函数一样也分为声明和实现.如果是全局变量,实现在它调用之后,那么需要在调用之前进行声明.注意:全局变量的声明只能写在函数外,写在函数就不是全局变量了而是局部变量. static: 修饰局部变量:      可以把局部变量变为静态变量.意思就是:程序一启动就加载,程序退出才会回收空间(跟全局变量很像) .   静态变量:用static修饰的局部变量就叫静态变量. 修饰全局变量:            让全局变量只能在本模块中访问.     修饰函数:   

C++:程序分段与内存分区

1. 进程分段 bss段(bss segment):存放未初始化(或者说是zero-initialization,详见C/C++对象初始化相关)的全局对象,属于静态内存分配.(bss全称为"Block Started by Symbol") data段(data segment):存放已经初始化的全局对象,属于静态内存分配. 栈(stack):存放函数内创建的局部对象(static对象属于全局对象),主要属于静态内存分配,C的alloca函数也用于支持动态内存分配. 堆(heap):存

C Language Study - how to use &#39;#&#39;

宏中的#的功能是将其后面的宏参数进行字符串化操作(Stringizing operator),简单说就是在它引用的宏变量的左右各加上一个双引号. 如定义好#define STRING(x) #x之后,下面二条语句就等价. char *pChar = "hello"; char *pChar = STRING(hello); 还有一个#@是加单引号(Charizing Operator) #define makechar(x)  #@x char ch = makechar(b);与ch

C Language Study - 0 &amp; &#39;0&#39; &amp; &#39;\0&#39;

The difference of 0 & '0' & '\0' ------------------------------------------------------------ 0 is a number(decimal). ------------------------------------------------------------ '0' is a char. It's ASCII equal  48(decimal). ----------------------

C++:内存分区

前言:最近正在学习有关static的知识,发觉对C++的内存分区不是很了解,上网查了很多资料,遂将这几天的学习笔记进行了简单整理,发表在这里 ? 栈区(stack):主要用来存放函数的参数以及局部变量.栈区由系统进行内存管理,在函数完成执行时,系统会自行释放栈区的内存,而不需要用户参与管理.整个程序的栈区的大小可以在编译器中由用户自行设定,默认的栈区大小为3M ? 堆区(heap):由用户手动申请,手动释放.如果用户忘记对其所申请的内存资源进行释放,该内存资源可能会在程序结束时由操作系统(OS)

jvm性能优化及内存分区

jvm性能优化及内存分区 2012-09-17 15:51:37 分类: Java Some of the default values for Sun JVMs are listed below. JDK 1.3.1_06 Initial Size Maximum Size Client JVM 1MB 32MB Server JVM 1MB 64MB JDK 1.4.1_01 Initial Size Maximum Size Client JVM 4MB 64MB Server JVM 4