内存堆栈基础

内存堆栈基础

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

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

    • 数据结构中的堆是一种二叉树的模拟,常用于取出最大值或最小值
      • 下图描述堆中二叉树关系
        1043344-20161114225618154-1083723399.png
    • 数据结构栈遵循先进后出的规则

      程序实例:
#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");
}

转载于:https://www.cnblogs.com/lhfen/p/6063739.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值