存储区

栈区:int a=3;

堆区:malloc(255)     (所占内存最大)

静态区:static float h=1.36;

常量区 “lanou"

代码区:void function(){…}

内存地址,从上到下,内存地址越来越小。

栈内存分配由高到低(栈底是高位内存,栈顶是低位内存),先进后出

错误使用:

char *fun()

{//注意:此处是把常量区的字符串”iphone”拷贝到栈内存中

char string[]=“iphone”;

return string;                    //栈内存是不安全的,禁止

}

静态存储区:

1、只初始化一次

2、如果初始没给值,默认值为0

3、只有程序退出才释放(永远存在)

常量区:

常量占用内存,只读状态,决不可修改

错误使用:

char * string=“iPhone”;

string[0]=‘a’;运行崩溃

堆区:

malloc

void *malloc(unsigned int size);

size需要分配的字节数(例:3*sizeof(int))size=总的字节数

void free(void *);

释放内存,内存释放的标记是标记删除

calloc

void *calloc(unsigned n,unsigned size);

分配n个size大小的空间(n*size=总的字节数),并且把该内存上的所有字节清零

realloc

void *realloc(void *p,unsigned newSize);

newSize=总的字节数

memset

void *memset(void *s,int c,size_t n)

从s指向的内存开始初始化n个字节的内容为c(n=总字节数)

memcpy

void *memcpy(void *dest,const void *source,size_t n)

从source指向的内存开始拷贝到dest,拷贝n个字节(n=拷贝的总字节数)

int memcmp(const void *buf1,const void *buf2,unsigned int count)

比较buf1、buf2指向的内存是否相同,比较count个字节(count=比较的总字节数)

堆区与栈区

时间: 2024-10-18 14:39:45

存储区的相关文章

C/C++ 知识点---存储区

在C++中,内存分成5个区,他们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区.    栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区.里面的变量通常是局部变量.函数参数等.    堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete.如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收.    自由存储区,就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结

【学习ios之路:C语言】存储区内存划分

一. 内存存储区的划分: 1.栈区:栈区主要存放函数内部定义的变量,数组.函数调用时,开辟空间,函数执行完毕,回收空间,空间的开辟与回收有系统管理. 2.堆区:堆区最大的特点:空间的开辟与释放有开发人员手动管理. 3.全局区静态区:主要存放函数外部定义的全局变量以及静态变量,空间一旦开辟,就不会回收.直到应用程序执行结束. 4.常量区:存储常量.1.整形常量.2.浮点型常量.3,字符串常量.4.字符串常量. 5.代码区:存放程序编译之后生成的cpu指令. 二.malloc,在堆区开辟空间. //

在证书存储区中找不到清单签名证书

我是在试图发布Winform程序的时候报的这个错. 方案一:不使用签名:项目属性-->签名-->ClickOnce反选 方案二:在“签名”选项卡中创建一个新的签名.就是下面的“为程序集签名” 方案三:打开csproj文件,调整节点值.<SignManifests>true</SignManifests>将true修改为false,和ClickOnce反选是一个意思. 在证书存储区中找不到清单签名证书,布布扣,bubuko.com

选定的数据存储区出现问题,原因可能是服务器名称或凭据无效,或者权限不足

问题: ASP.NET Configuration site->安全,报错 "选定的数据存储区出现问题,原因可能是服务器名称或凭据无效,或者权限不足" 解决: 打开文件C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config 找到 <connectionStrings> <add name="LocalSqlServer" connectionString=&quo

【JDK源码分析】String的存储区与不可变性(转)

// ... literals are interned by the compiler // and thus refer to the same object String s1 = "abcd"; String s2 = "abcd"; s1 == s2; // --> true // ... These two have the same value // but they are not the same object String s1 = new

C++局部变量、全局变量、静态变量(堆、栈、静态存储区)

1 static关键字 1.1 隐藏 eg: //a.c文件中 char a = 'A'; void msg() { printf("Hello\n"); } //main.c文件中 extern char a; printf("%c",a); 输出结果:A Hello 所有未加static前缀的全局变量和函数都具有全局可见性,其它的源文件也能访问.a是全局变量,msg是函数,并且都没有加static前缀,因此对于另外的源文件main.c是可见的. 如果加了stat

栈,堆,静态存储区

1.栈是先入后出, 2.栈保存了一个函数调用所需的维护信息,函数参数,函数返回地址,局部变量,函数调用上下文.没有栈就没有函数,没有局部变量. 3. 栈保存了一个函数调用所需的维护信息(函数参数,函数返回值地址,局部变量,函数调用上下文) 4.栈上的数据在函数返回后就会被释放掉,无法传递到函数外部 5.堆是程序中一块巨大的内存空间,可由程序自由使用 6.堆中被程序申请使用的内存在程序主动释放前将一直有效 7.堆空间通过申请才能获得 8.系统对堆空间的管理方式(空闲链表法,位图法,对象池法等等)

常量字符串为什么位于静态存储区?

char *c="zhaobei";书上说: "zhaobei"这个字符串被当作常量而且被放置在此程序的内存静态区.那一般的int i=1;1也是常量,为什么1就不被放置在此程序的内存静态区了呢?请高手指点! 所有的字符窜常量都被放在静态内存区因为字符串常量很少需要修改,放在静态内存区会提高效率 例: char str1[] = "abc";char str2[] = "abc"; const char str3[] = &q

解决Visual Studio编译错误:在证书存储区中找不到清单签名证书

解决Visual Studio编译错误:在证书存储区中找不到清单签名证书 [1]方法一:右击项目→属性→签名→将<为ClickOnce清单签名(M)>前面的勾去掉. [2]方法二:用记事本打开相应的csproj文件,调整节点值:<SignManifests>true</SignManifests>将true修改为false. [3]方法三:在签名中创建一个新的签名.本方法未测试. 解决Visual Studio编译错误:在证书存储区中找不到清单签名证书,布布扣,bubu