zoukankan      html  css  js  c++  java
  • c语言内存

    冯诺依曼结构是:数据和代码放在一起。
    哈佛结构是:数据和代码分开存在。
    内存管理
    fiLO 先进后出 栈
    FIFO 先进先出 队列
    栈的特点是入口即出口,另一个口是堵死的,所以先进去的后出来
    队列的特点是入口和出口都有,必须从入口进去,从出口出来,所以先进去的必须先出来,否则就堵住后面的。

    堆内存释放时最简单,直接调用free释放即可。 void free(void *ptr);
    堆内存申请时,有3个可选择的类似功能的函数:malloc, calloc, realloc
    void *malloc(size_t size);
    void *calloc(size_t nmemb, size_t size); // nmemb个单元,每个单元size字节
    void *realloc(void *ptr, size_t size); // 改变原来申请的空间的大小的

    譬如要申请10个int元素的内存:
    malloc(40); malloc(10*sizeof(int));
    calloc(10, 4); calloc(10, sizeof(int));

    栈例子

    #include<stdio.h>
    #include<stdlib.h>
    typedef struct Lnode {
        int data;
        struct Lnode *next;
    }Lnode;
    //初始化链栈
    void initStack(Lnode *ln) {
        ln = (Lnode *)malloc(sizeof(Lnode));
        ln->next = NULL;
    }
    //判断链栈是否为空
    int StackEmpty(Lnode *ln) {
        return (ln->next == NULL ? 1 : 0);
    }
    //进栈
    void push(Lnode *ln, int x) {
        Lnode *p;
        p = (Lnode *)malloc(sizeof(Lnode));
        if (p == NULL) {
            printf("ERROR");
            exit(0);
        }
        p->next = NULL;
        p->data = x;
        p->next = ln->next;
        ln->next = p;
    }
    //出栈
    int pop(Lnode *ln, int *x) {
        Lnode *p = ln->next;
        if (p == NULL) {
            return 0;
        }
        *x = p->data;
        ln->next = p->next;
        free(p);
        return 1;
    }
    void printStack(Lnode *ln) {
        Lnode *p = ln->next;
        while (p != NULL) {
            printf("%d
    ", p->data);
            p = p->next;
        }
    }
    void main() {
        Lnode ln;
        int x;
        initStack(&ln);
        push(&ln, 2);
        push(&ln, 3);
        push(&ln, 4);
        push(&ln, 5);
        pop(&ln, &x);
        printf("出栈元素为:%d
    ", x);
        printStack(&ln);
    
    }

  • 相关阅读:
    [C#]StringWriter实现的一个功能
    ASP.NET AJAX入门系列(1):概述
    ASP.NET 2.0 之 Master Page 学习笔记
    C#文件读写常用类介绍
    最新版FreeTextBox(版本3.1.6)在ASP.Net 2.0中使用简解
    关于Ajax 错误:'sys'未定义解决方法.
    教你解决微软MSN8.5无法安装问题
    对于javascript的function的总结
    ASP.NET开发:在用户控件中添加属性
    如何遍历枚举类型的对象、并获取枚举类型长度
  • 原文地址:https://www.cnblogs.com/xujunjia/p/11495188.html
Copyright © 2011-2022 走看看