社区
C语言
帖子详情
用malloc分配的内存是在堆上还是栈上
abcdefg171459
2006-11-11 01:35:53
如题
...全文
6705
13
打赏
收藏
用malloc分配的内存是在堆上还是栈上
如题
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
alan001
2006-11-13
打赏
举报
回复
CS:BP管理64K数据区(16位指针)
alan001
2006-11-13
打赏
举报
回复
指针指向CS数据段指向的数据区(堆)
alphajin
2006-11-12
打赏
举报
回复
堆,记得用完之后要释放.
menjingzhou
2006-11-12
打赏
举报
回复
当然是堆了,呵呵
kinglake_hx123
2006-11-12
打赏
举报
回复
一个是需要去申请的----堆空间;而另一个是编译时自动分配的---栈
fashionzhou
2006-11-12
打赏
举报
回复
堆区,也叫自由存储区.
superxiaomm
2006-11-12
打赏
举报
回复
堆
luora
2006-11-11
打赏
举报
回复
全局变量或者静态变量,它们都放在堆里的
局部变量放在栈里的
飞哥
2006-11-11
打赏
举报
回复
堆
ysc918
2006-11-11
打赏
举报
回复
1
转贴
-------------------------
堆和栈的区别
一个由C/C++编译的程序占用的内存分为以下几个部分
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其
操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回
收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的
全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另
一块区域。 - 程序结束后由系统释放。
4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放
5、程序代码区—存放函数体的二进制代码。
二、例子程序
这是一个前辈写的,非常详细
//main.cpp
int a = 0; 全局初始化区
char *p1; 全局未初始化区
main()
{
int b; 栈
char s[] = "abc"; 栈
char *p2; 栈
char *p3 = "123456"; 123456\0在常量区,p3在栈上。
static int c =0; 全局(静态)初始化区
p1 = (char *)malloc(10);
p2 = (char *)malloc(20);
分配得来得10和20字节的区域就在堆区。
strcpy(p1, "123456"); 123456\0放在常量区,编译器可能会将它与p3所指向的"123456"
优化成一个地方。
}
hanqiou
2006-11-11
打赏
举报
回复
堆...显然...搞清楚内存分配很重要...
ckt
2006-11-11
打赏
举报
回复
堆啊
cy2005abc
2006-11-11
打赏
举报
回复
堆区
C++第3课:C++
内存
泄露检测原理及案例实战
C++第3课:C++
内存
泄露检测原理及案例实战本课程侧重于C++的
内存
管理及泄露检测。我将带领大家学习OS的
内存
管理机制、C++的
堆
和栈、
内存
泄露及检测等。本课程具体的内容主要包括C++
内存
泄露案例、VS2015
内存
泄露检测、野指针、VirtualAlloc/HeapAlloc/
malloc
/new的区别、C++
堆
和栈的
内存
管理、栈简介、
堆
简介、
堆
与栈区别、栈的
内存
分配
、Windows的虚拟
内存
技术、Windows的
内存
映射文件技术、Linux的虚拟
内存
技术、Linux的Valgrind
内存
泄露检测、Windows的VLD
内存
泄露检测、C++
内存
泄露检测方式之对象计数、C++
内存
泄露检测方式之重载new和delete、C++
内存
泄露检测方式之智能指针等。
内存
分配
--
堆
和栈
内存
分配
1、栈(stack)
内存
由系统自动
分配
,自动释放,
分配
的位置和大小无法主动控制 2、
堆
(heap) 主动申请和释放,new、
malloc
等函数
分配
内存
3、
堆
和栈的主要区别 ① 申请方式 int a; //系统自动
分配
内存
int *p = new int a[4]; //主动申请
内存
,调用delete[]释放
内存
② 效率 栈: windows下系统预留栈的空间一般为2M,只要申请的
内存
大小小于剩余的可用栈 大小,系统立马
分配
,否则报错,GetlastError();
堆
: 操作系统有
malloc
内存
分配
位置及进程
内存
布局
进程
内存
分布 典型的 Linux 进程
内存
分布图,图片来自这里: 这张图中有映射段的位置,但是还有一个重要的部分的缺失,就是运行时的参数和环境变量,在 Linux/Unix 系统编程手册这本书第 6 章讲进程的
内存
分配
里有给:
malloc
内存
分配
在映射段 当
malloc
申请
分配
的
内存
过大(128K以上),内部将使用 mmap 而不是 brk 来
分配
内存
。 测试代码: printf("program break:%p\n", sbrk(0)); char* ptr[10];
malloc
如何
分配
内存
今天,我们来学习
malloc
分配
内存
的两种方法,brk()和mmap()
malloc
函数的学习
malloc
函数的作用是申请
分配
一块连续空间。 1.头文件
malloc
函数的头文件是<
malloc
>或者< stdlib.h >或者< alloc.h >(linux) 2.返回值
malloc
若申请
内存
成功则会返回一个指向改该空间首地址的指针,该指针的类型为void(即可以被强制类型转化为需要的类型)。失败则返回一个NULL指针。一般情况下申请
内存
不会因为
内存
不足出现失败情况。所以失
C语言
69,382
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章