zoukankan      html  css  js  c++  java
  • register变量,又,指针,再,malloc/new

    1.

    频繁存取修改的变量,c中有个叫寄存器变量的好物。register声明只适用于函数参数和auto变量。但——寄存器变量是可以被编译忽略的。也就是说,通常没有多大必要在C++中使用它,除非是底层硬件编程。

    2. 

    指针变量必须要有一个类型说明符。比如int* p,这样的声明才完整。 

    *表示其处存放的是地址,int表示从所指地址处开始往后sizeof(int)的区域就是p指示的内存区域。

    一直困惑,虽然我知道int的大小,但操作系统如何知道?我知道int32* p是4byte长的区域的起始地址,但操作系统如何知道?p本身并没有携带空间长度信息。

    更甚,void*,它如何知道自己这篇区域的长度?

    原来。。。是这样:

    分配地址,像c++对象模型用来记录UDT信息的结构体一样, 分配出来的区域头部会附着一个结构体用来记录该区域的大小。

    参考:http://bbs.bccn.net/thread-81781-1-1.html 

    用门牌号找到了那栋房子,门口插这一根牌子,上书“占地N坪”。就是这么简单。 

    也就是说,实际分配的内存总是比申请时的多。 

    3.

    对于没有复杂构造函数的类和结构体,malloc和new效率没有区别。

    debug百万个对象有几毫秒差距,release的这个差距几乎木有。

    (release的效率大约是debug的一般,大概vs对debug做了啥米链接加速之类的?) 

    总的来说,木甚区别。如有构造函数的话,当然就要视这片指令的宏伟程度了。

    #include <stdio.h>
    #include 
    <Windows.h>

    struct Vec3f
    {
        
    //Vec3f():x(0.f),y(0.f),z(0.f){;}
        float x;
        
    float y;
        
    float z;
    };

    struct VertexBuffer
    {
        Vec3f        point; 
        Vec3f        normal;
        
    float        texCoord[2];
    };

    int main()
    {
        
    const int num = 1000000;
        
    int beginTick, endTick;

        beginTick 
    = GetTickCount();
        printf(
    "new begin: %d\n",beginTick);
        
    for (int i=0 ;i<num; i++)
        {
            VertexBuffer
    * tmp = new VertexBuffer;
            delete tmp; 
        }
        endTick 
    = GetTickCount();
        printf(
    "new end: %d, used: %d \n", endTick, endTick - beginTick);


        beginTick 
    = GetTickCount();
        printf(
    "begin: %d\n",beginTick);
        
    for (int i=0 ;i<num; i++)
        {
            VertexBuffer
    * tmp = (VertexBuffer*) malloc(sizeof(VertexBuffer*));
            free(tmp);
        }
        endTick 
    = GetTickCount();
        printf(
    "end: %d, used: %d \n", endTick, endTick - beginTick);


        system(
    "PAUSE");

        
    return 0;


  • 相关阅读:
    敏捷个人手机应用:如何下载敏捷个人资料
    2014年8月10日:敏捷个人奥森跑步+慢走分享
    敏捷个人手机应用:如何进行敏捷个人练习
    敏捷个人新体系:定位
    任何社区,只要能影响他人成长的人,都可以成为敏捷个人的荣誉会员
    亲密爱人:《亲密关系》读书笔记
    亲密爱人:《亲密关系
    2014.7.12 敏捷个人奥森健步走&敏友分享会.活动报道
    开放产品开发(OPD):产品负责人的工作原则和方法
    #敏捷个人资料# 免费下载 《敏捷个人-认识自我,管理自我 v0.8.pdf》
  • 原文地址:https://www.cnblogs.com/mumuliang/p/2080360.html
Copyright © 2011-2022 走看看