c语言在内存中如何储存_c语言分配内存

c语言在内存中如何储存_c语言分配内存C语言内存四区内存四区概述1.代码区放函数,是操作系统管理一般不需要管,因为它的汇编,函数指针操作的是代码区。2.栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量等值,其操作方式类似于数据结构中的栈。需要由汇编操控,C语言无法操控。3.堆区(heap):

C语言内存四区   内存四区概述   
c语言在内存中如何储存_c语言分配内存
c语言在内存中如何储存_c语言分配内存   1.代码区放函数,是操作系统管理一般不需要管,因为它的汇编,函数指针操作的是代码区。   2.栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量等值,其操作方式类似于数据结构中的栈。需要由汇编操控,C语言无法操控。   3.堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS(操作系统)回收。它和数据结构的堆是两回事。   4.全局区/静态区(static):存放常量和全局变量,初始化的在一块区域,未初始化的在另外一块区域。程序结束后由系统释放。   全局区   char *pMem1()   {   //字符串是如何存在指针里的   char *p1=”guoguo”;   return p1;   }//函数调用完毕,内存就销毁了。   //只是存了个地址,变量是在全局区   char *pMem2()   {   //两个不同的函数定义了一个相同的字符串,地址一样吗   char *p2=”guoguo”;   return p2;   }//因为全局区的内容一样,所以这个函数也只是保存了全局区的地址,故和pMen1的地址一样   int main(void)   {   char *p1=NULL;   char *p2=NULL;   p1=pMem1();   p2=pMem2();   printf(“p1=%s,p1=%p”,p1,p1);   printf(“p2=%s,p2=%p”,p2,p2);   //打印出来的结果地址和值都一样   }
c语言在内存中如何储存_c语言分配内存
c语言在内存中如何储存_c语言分配内存   数据存在全局区,但把地址赋值给了指针变量   指针指向谁就把谁的地址赋值给指针
c语言在内存中如何储存_c语言分配内存
c语言在内存中如何储存_c语言分配内存   栈区的特点:当栈区的函数执行完毕的时候,变量就销毁掉了
c语言在内存中如何储存_c语言分配内存
c语言在内存中如何储存_c语言分配内存   栈区   在栈区开辟的数组会被系统自动销毁   char *p_str()   {   char str[100] = “guoguo”;   //指针是四个字节,四个字节不能存储字符串,数组是100个字节,字符串存在栈区   return str;   }   int main(void)   {   char *p = NULL;   p = p_str();//栈区销毁了   printf(“p=%s\n”,p);//p是数组的首地址   //%s是打印地址所指向内存空间的数据   }
c语言在内存中如何储存_c语言分配内存
c语言在内存中如何储存_c语言分配内存   因为p_str申明的是数组,所以是把全局区的数据拷贝到栈区,是复制了全局变量的内容,和地址无关
c语言在内存中如何储存_c语言分配内存
c语言在内存中如何储存_c语言分配内存   栈区销毁了,所以查找的时候会有乱码   %s是打印地址所指向内存空间的数据   堆区   char *phead()   {   char *tmp = (char *)malloc(100)   if(tmp == NULL)   {   return NULL;   }   strcpy(tmp,”guoguo”)   //原型声明:char *strcpy(char *dest,const char *stc)   把从stc地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间   }   int main(void)   {   char *p = NULL;   p = phead();   if(p!=NULL)   {   printf(“%s\n”,p)   free(p);   p=NULL;   }   }
c语言在内存中如何储存_c语言分配内存
c语言在内存中如何储存_c语言分配内存   free的意思不是清空内存,而是解除与指针的绑定关系,原先main函数可以通过指针找到堆区的地址,现在把main函数指向堆区的指针给断掉了,后续往堆区加东西里面的数据就会被覆盖掉

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/62195.html

(0)
上一篇 2024年 8月 28日
下一篇 2024年 8月 28日

相关推荐

关注微信