• C学习笔记-一些知识


    memset可以方便的清空一个结构类型的变量或数组。

    如:

    struct sample_struct
    {
        char csName[16];
        int iSeq;
        int iType;
    };

    对于变量

    struct sample_strcut stTest;

    一般情况下,清空stTest的方法:

    stTest.csName[0]='/0';
    stTest.iSeq=0;
    stTest.iType=0;

    用memset就非常方便:

    memset(&stTest,0,sizeof(struct sample_struct));

    如果是数组:

    struct sample_struct TEST[10];

    memset(TEST,0,sizeof(struct sample_struct)*10);

    new/delete  malloc/free

    堆、自由存储区

    参考:http://www.cnblogs.com/QG-whz/p/5060894.html

    当我问你C++的内存布局时,你大概会回答:

    “在C++中,内存区分为5个区,分别是堆、栈、自由存储区、全局/静态存储区、常量存储区”。

    如果我接着问你自由存储区与堆有什么区别,你或许这样回答:

    “malloc在堆上分配的内存块,使用free释放内存,而new所申请的内存则是在自由存储区上,使用delete来释放。”

    这样听起来似乎也没错,但如果我接着问:

    自由存储区与堆是两块不同的内存区域吗?它们有可能相同吗?

    从技术上来说,堆(heap)是C语言和操作系统的术语。堆是操作系统所维护的一块特殊内存,它提供了动态分配的功能,当运行程序调用malloc()时就会从中分配,稍后调用free可把内存交还。而自由存储是C++中通过new和delete动态分配和释放对象的抽象概念,通过new来申请的内存区域可称为自由存储区。基本上,所有的C++编译器默认使用堆来实现自由存储,也即是缺省的全局运算符new和delete也许会按照malloc和free的方式来被实现,这时藉由new运算符分配的对象,说它在堆上也对,说它在自由存储区上也正确。但程序员也可以通过重载操作符,改用其他内存来实现自由存储,例如全局变量做的对象池,这时自由存储区就区别于堆了。我们所需要记住的就是:

    堆是操作系统维护的一块内存,而自由存储是C++中通过new与delete动态分配和释放对象的抽象概念。堆与自由存储区并不等价。

  • 相关阅读:
    MyEclipse配置Tomcat 并编写第一个JSP程序
    ubuntu安装postgresql与postgis
    ubuntu12.10升级至14.04
    ubuntu 12.10无法用apt-get安装软件 Err http://us.archive.ubuntu.com quantal-updates/main Sources 404 Not
    hive0.13网络接口安装
    hive报错 Another instance of Derby may have already booted the database
    前端开发者进阶之函数柯里化Currying
    js中的事件委托
    while 和 for 对比
    小图标文字对齐的终极解决方案
  • 原文地址:https://www.cnblogs.com/gnivor/p/7845845.html
Copyright © 2020-2023  润新知