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);

}

原文地址:https://www.cnblogs.com/xujunjia/p/11495188.html