码迷,mamicode.com
首页 > 其他好文 > 详细

堆,栈内存分配 && 常量区

时间:2015-08-16 21:18:11      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:

1题:

针对以下代码,
1
2
3
4
const char str1[] = "abc";
const char str2[] = "abc";
const char *p1 = "abc";
const char *p2 = "abc";
判断下列说法哪个是正确的()

正确答案: A   你的答案: F (错误)

str1和str2地址不同,P1和P2地址相同
str1和str2地址相同,P1和P2地址相同
str1和str2地址不同,P1和P2地址不同
str1和str2地址相同,P1和P2地址不同
4个地址都相同
4个地址都不同

 

 

 

 

 

 

 

 

解析:str1与str2:在栈中分配内存,指向不同地址。

p1,p2所指位置指向常量区。

关于栈,堆的内存分配:

1 静态分配发生在程序编译和连接时,动态分配则发生在程序调用执行时。

2 堆是动态分配的,没有静态分配的堆。

3 栈有两种分配方式,静态和动态。静态分配由编译器完成:如局部变量的分配。

4 动态分配由函数malloc分配,不过,栈的动态分配和堆不同,栈的由编译器进行释放,无需我们手工实现。


栈内存分配
—————
char*
AllocStrFromStack()
{
  char pstr[100];
  return pstr;
}
pstr在函数返回时被系统释放了。于是所返回的char*什么也没有

堆内存分配
—————
char*
AllocStrFromHeap(int len)
{
  char *pstr;

  if ( len <= 0 ) return NULL;
  return ( char* ) malloc( len );
}
pstr是从堆上分配内存,故,即使是程序退出,也不释放,故第二个函数返回的内存没有问题,可以使用,但一定要用free释放,否则 发生内存泄露。

 

 

 

 

 

 

 

 

 

堆,栈内存分配 && 常量区

标签:

原文地址:http://www.cnblogs.com/dan-cnblogs/p/4734879.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!