内存堆栈基础
内存堆栈基础
操作系统主要作用:管理调度线程和进程
- 内存堆栈和数据结构堆栈
-
内存栈的大小由编译器决定,自动释放,自动回收
-
内存堆是手动创建、手动释放的
-
数据结构中的堆是一种二叉树的模拟,常用于取出最大值或最小值
- 下图描述堆中二叉树关系
- 下图描述堆中二叉树关系
-
数据结构栈遵循先进后出的规则
-
程序实例:
#include<stdio.h>
#include<stdlib.h>
#include<process.h>
#include<Windows.h>
//auto int num //栈 自动回收自动送回访
//栈是由编译器维护,自动回收自动释放,默认为1M,可以手动拓展栈的大小
//void *p=malloc(1024) //堆 手动分配,手动释放
void stack(int numA) //numA栈
{
int numB = 10; //局部变量,栈
printf("%p,%p", &numA, &numB);
numA = 1;
numB = 2;
printf("\n");
}
void main4()
{
stack(1);
printf("\n\n\n");
stack(1);
printf("\n\n\n");
//int num[1024 * 1024];
system("pause");
}
void main5()
{
//32堆的限制最大为2G
//void *p = malloc(1024 * 1024);
for (int i = 0; i <8; i++)
{
//eginthread(run, 0, NULL);//多线程,每一个线程都有自己的栈
}
system("pause");
}
void run(void *p)
{
//while (1)
//{
// int num[1024 * 1024]; //自动自动释放
//}
while (1)
{
malloc(1024 * 1024 * 10);
Sleep(100);
}
}
void main()
{
//n(NULL);
for (int i = 0; i <8; i++)
{
_beginthread(run, 0, NULL);//多线程,
}
system("pause");
}
栈,是多线程,每个线程都有独立栈
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
//栈,是多线程,每个线程都有独立栈
//堆是共享的,32进程最大2G
//64位是1024G
void run(void *p)
{
while (1)
{
malloc(1024 * 1024 * 10);
Sleep(100);
}
}
void main()
{
//n(NULL);
for (int i = 0; i <3; i++)
{
_beginthread(run, 0, NULL);//多线程,
}
system("pause");
}