内存堆栈基础

内存堆栈基础

操作系统主要作用:管理调度线程和进程

  • 内存堆栈和数据结构堆栈
    • 内存栈的大小由编译器决定,自动释放,自动回收

    • 内存堆是手动创建、手动释放的

    • 数据结构中的堆是一种二叉树的模拟,常用于取出最大值或最小值

      • 下图描述堆中二叉树关系
    • 数据结构栈遵循先进后出的规则

程序实例:

#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");
}
posted @ 2016-11-14 22:21  呉语伦比  阅读(175)  评论(0编辑  收藏  举报