zoukankan      html  css  js  c++  java
  • 理解sizeof

    其实理解 sizeof 只需要抓住一个要点:栈

    程序存储分布有三个区域:栈、静态和动态。能够从代码直接操作的对象,包括任何类型的变量、指针,都是在栈上的;动态和静态存储区是靠栈上的指针来间接操作的。sizeof 操作符,计算的是对象在栈上的投影体积;记住这个就很多东西都很清楚了。

    char const * static_string = "Hello";

    sizeof(static_string) 是 sizeof 一个指针,所以在 32bit system 4

    char stack_string[] = "Hello";

    sizeof(stack_string) 是 sizeof 一个数组,所以是 6 * sizeof(char)

    char * string = new char[6];

    strncpy(string,"Hello",6");

    sizeof(string) 是 sizeof 一个指针,所以还是 4。和第一个不同的是,这个指针指向了动态存储区而不是静态存储区。

    不管指针指向的内容在什么地方,sizeof 得到的都是指针的栈大小

    C++ 中对引用的处理比较特殊;sizeof 一个引用得到的结果是 sizeof 一个被引用的对象的大小。

    另外,看到的关于sizeof的两个精巧的宏实现。

    非数组的sizeof:

    #defne _sizeof(T) ( (size_t)((T*)0 + 1) )

    数组的sizeof:

    #define array_sizeof(T)  ( (size_t)(&T+1)  - (size_t)(&T) )

    原理就是c/c++中的指针运算。

    原文:

    http://blog.chinaunix.net/uid-20545494-id-1929750.html

  • 相关阅读:
    P1182 数列分段`Section II` 二分
    洛谷 P1025 数的划分
    深浅拷贝
    数据的内置方法
    控制流程-if/while/for
    python的基本运算符
    花式赋值
    python的注释
    Python的垃圾回收机制
    变量与常量
  • 原文地址:https://www.cnblogs.com/mydomain/p/2774829.html
Copyright © 2011-2022 走看看