博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C学习笔记-一些知识
阅读量:5226 次
发布时间:2019-06-14

本文共 1040 字,大约阅读时间需要 3 分钟。

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

堆、自由存储区

参考:

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

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

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

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

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

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

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

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

 

转载于:https://www.cnblogs.com/gnivor/p/7845845.html

你可能感兴趣的文章
[WebMatrix] 如何将SQL Compact 4.0 移转至SQL Server 2008 Express
查看>>
Java内部类详解
查看>>
验证码类[置顶] SSO单点登录系列5:cas单点登录增加验证码功能完整步骤
查看>>
冒泡排序
查看>>
python-基础
查看>>
《SQL Server 监控和诊断》
查看>>
《算法竞赛入门经典》札记1
查看>>
吴裕雄--天生自然 PYTHON3开发学习:多线程
查看>>
吴裕雄--天生自然C语言开发:数组
查看>>
吴裕雄 python 数据处理(1)
查看>>
区块链钱包应用如何开发
查看>>
HDU_3746 Cyclic Nacklace(KMP)
查看>>
Android爬坑之旅:软键盘挡住输入框问题的终极解决方式
查看>>
POJ 3301 Texas Trip (三分)
查看>>
java(配置eclipse )
查看>>
python - 简明 性能测试
查看>>
C扩展python的module和Type
查看>>
asp.net 文件压缩zip下载
查看>>
html
查看>>
Linux命令(二十二) 改变文件权限 chomd
查看>>