• sizeof运算符、malloc函数及free函数


    一、sizeof运算符的用法

    1.sizeof运算符给出某个类型或变量在内存中所占据的字节数。

    int a;  sizeof(a)=4;  //sizeof(int)=4;

    double b;  sizeof(b)=8;  //sizeof(double)=8;

    2.数组的sizeof值等于数组所占用的内存总字节数。

    如:char a[] = "yes";  sizeof(a);  // 结果为4,字符末尾还存在一个NULL终止符

         int a[3];  sizeof(a);  // 结果为3*4=12,3个int类型
    在学数组和函数那块是遇到的sizeof就是在求数组的长度:

    int a = sizeof(a1) / sizeof(a1[0]); // 总长度/第一个元素的长度

    3. 指针变量的sizeof值与指针所指的对象没有任何关系,所有的指针变量所占内存大小相等。(不同的编译器指针变量所占内存大小不同)

    char *p = "abc";
    int *q;
    string *s;
    sizeof( p ); // 结果为4
    sizeof( q ); // 结果为4
    sizeof( s ); // 结果为4

    如果操作数是函数中的数组形参或函数类型的形参,sizeof给出其指针的大小。

    void (*p)();// 函数指针

    sizeof( p );// 结果为4

    二、malloc函数(内存的动态分配)

    1.malloc函数原型:

    void *malloc(unsigned int size);

    malloc向系统申请分配指定size个字节堆内存连续空间,返回类型是 void* 类型,void* 表示未确定类型的指针。在C语言中,void* 类型可以强制转换为任何其它类型的指针。

    p = malloc (sizeof(int)*n);//隐式类型转换,分配n个整数内存空间
    p = (int *) malloc (sizeof(int)*n);//显式强制类型转换,分配n个整数内存空间

    函数返回值是所分配区域的第一个字节的地址,如果申请分配内存失败,则返回空指针(NULL)。

    2.申请了内存空间后,必须检查是否分配成功。

    q=(DLNode *)malloc(sizeof(DLNode));
    if(!q) return OVERFLOW;

    3.虽然malloc()函数的类型是(void *),任何类型的指针都可以转换成(void *),但习惯上进行显式强制类型转换。

    三、free函数的用法

    1.free函数原型:

    void free(void *p);//无返回值

    free()函数释放变量p所指向的动态内存空间,p应该是最近一次调用malloc函数时得到的函数返回值。

    free( p );//释放动态空间

    2.当不需要再使用申请的内存时,一定要记得释放,如果申请后不释放就会造成内存泄漏。

    3.malloc函数和free函数应该是配对使用的,且释放只能一次。

    最后,sizeof在后面的结构体和联合体中用的会更深入一些,待学到那块时再来补充总结。

  • 相关阅读:
    Druid数据库连接池源码分析
    彻底理解Java的Future模式
    CountDownLatch与CyclicBarrier
    Semaphore实现原理分析
    ThreadLocal类分析
    Atomic类和CAS
    synchronized VS Lock, wait-notify VS Condition
    Klass与Oop
    JVM类加载以及执行的实战
    123
  • 原文地址:https://www.cnblogs.com/wxywxy/p/6869642.html
Copyright © 2020-2023  润新知