const与define应用上该怎么取舍

const与define应用上该怎么取舍

#define WYB 100;
const float WYB = 100;
  • define是在预编译的时候展开替换的,const是编译运行阶段使用
  • define没有类型,不做类型检查处理。只是替换。const常量有具体的类型,在编译的时候会进行类型检查。
  • define宏定义仅仅是替换宏定义不分配内存,变量定义分配内存,const会在内存中分配。
  • const更节省空间,避免不必要的内存分配。
        #define PI 3.14159 //常量宏
        const doulbe Pi=3.14159; //此时并未将Pi放入ROM中
        double i=Pi; //此时为Pi分配内存,以后不再分配!
        double I=PI; //编译期间进行宏替换,分配内存
        double j=Pi; //没有内存分配
        double J=PI; //再进行宏替换,又一次分配内存!

所以总的来说选择constdefine更省空间。

什么是堆空间什么是栈空间?
 堆-heap,栈-stack,
  • 从汇编层面上讲,栈是机器系统提供给我们的数据结构,堆是我们通过C/C++函数去申请开辟的数据结构。
  • 数据结构上来说,栈是个先进后出的线性表,存储方式上又分了顺序栈、链式栈。堆则是二叉树的一种。一般用到的排序都是堆排序。
  • 内存管理上,栈会自动回收,堆需要我们自己管理。
一个由c/C++编译的程序占用的内存分为以下几个部分
  • 栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

  • 堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。

  • 全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 程序结束后有系统释放

  • 文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放

  • 程序代码区—存放函数体的二进制代码。

posted @   懒懒初阳  阅读(589)  评论(0编辑  收藏  举报
编辑推荐:
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
历史上的今天:
2015-08-12 isMemberOf与isKindOf的区别
2015-08-12 当你的工程出现了问题,在别的电脑上可以正常运行。你该怎么做。。
点击右上角即可分享
微信分享提示