C语言篇之内存

  1. 内存编址、寻址和内存对齐
    内存编址是以字节为单位的,其中int整形和CPU本身的数据位宽是一样的,如32位CPU int是32位,整数类型当数据类型和内存相匹配时才能获得最好的性能。内存的对齐访问不是逻辑问题而是硬件问题,对齐访问很配合硬件所以效率会很高,因为非对齐访问和硬件本身不搭配,所以效率不高,由于兼容性问题,一般硬件提供非对齐访问,但是效率要低很多。
  2. 数据类型的本质含义
    数据类型的本质含义表示所占内存格子的长度和解析方法的不同。
    3.内存管理之栈 stack
    栈的特点:1 栈是自动管理的,自动分配、自动回收
    2 反复使用
    3 脏内存
    4 临时性
    5 栈会溢出
    栈是有大小的,栈内存太小怕溢出太大怕浪费内存,一定要避免栈的溢出。
    局部变量都是存储在栈上的。静态局部变量在存储类方面和全局变量一样,只是改变了链接属性。
  3. 内存管理之堆 heap
    由操作系统堆管理器管理,堆管理器是操作系统的一个模块,分配灵活按需分配。
    堆的特点:1 大块内存
    2 需要程序手动申请和释放
    3 脏内存 堆内存也是反复使用的,而且在释放之前不会清楚,所以堆也是脏的
    4 临时性 堆内存只有在malloc和free之间可以访问,在malloc之前和free之后都不能在访问。
    举例说明:

       需要1000个int类型元素的数组
       第一步:申请和绑定
       int *P = (int *)malloc(1000 * sizeof(int));
       第二步:检验
       if(NULL == P)
           {
                printf("malloc error.\n");
                return -1;
            }
    第三步:使用申请到的内存
    第四步:释放
    free(P);
    P = NULL;
    

    谨记:在这个P释放之前一定不要另外赋值,否则这块内存就丢掉了,这就是所谓的程序吃内存也就是内存泄漏。
    malloc的返回值是void * 类型的,malloc帮我们分配时只分配的内存空间,至于这个空间我们用来存储什么类型的元素malloc是不关心的,由我们自己来定。
    void free(void *ptr) ;
    void *malloc(size_t size) ;
    void *calloc(size_t nmemb , size_t size) ;//需要nmemb个单元,size个字节
    void *realloc(void *ptr ,size_t size);//改变原来申请的空间的大小。
    //申请10个int类型元素的内存
    (int *) malloc(10 *sizeof(int));
    (int *)calloc(10 , sizeof(int));
    malloc 返回的是一个void * 类型的指针,实质上malloc的返回值是堆管理器分配给我们本次申请的那段内存空间的首地址。

本博文只是作为自己的一个笔记,如果能帮助其他人更好,若有疑问欢迎指出,欢迎加QQ 1922546282,共同讨论与学习。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值