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

  • 相关阅读:
    第一章-环境准备
    selenium-pageobject设计模式
    自动化测试用例设计原则
    selenium隔离环境安装、以及示例
    json extractor获取返回值中动态新增的数据
    jmeter返回值乱码问题
    liunx命令
    SQL表结构语句
    测试网络脚本python
    C# 订单流水号生成
  • 原文地址:https://www.cnblogs.com/mydomain/p/2774829.html
Copyright © 2011-2022 走看看