当前位置: 首页 > wzjs >正文

网站开发 chrome gimp北京搜索优化推广公司

网站开发 chrome gimp,北京搜索优化推广公司,深圳招聘一般在哪个网站,商城网站流量博主介绍:程序喵大人 35- 资深C/C/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C20高级编程》《C23高级编程》等多本书籍著译者更多原创精品文章,首发gzh,见文末👇&#x1…

 博主介绍:程序喵大人

  • 35- 资深C/C++/Rust/Android/iOS客户端开发
  • 10年大厂工作经验
  • 嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手
  • 《C++20高级编程》《C++23高级编程》等多本书籍著译者
  • 更多原创精品文章,首发gzh,见文末
  • 👇👇记得订阅专栏,以防走丢👇👇
    😉C++基础系列专栏
    😃C语言基础系列专栏
    🤣C++大佬养成攻略专栏
    🤓C++训练营
    👉🏻个人网站

最主要还是因为栈内存和堆内存的管理方式不同。

内存管理方式不同

栈内存

  • 栈内存是由编译器自动管理的,内存的分配和释放遵循 后进先出(LIFO) 的原则。

  • 栈内存的分配和释放是通过移动栈指针来实现的,这肯定是一个非常快速的操作。

    • 分配:栈指针向下移动,分配内存。

    • 释放:栈指针向上移动,释放内存。

堆内存

  • 堆内存是由程序员手动管理的,内存的分配和释放需要通过动态内存分配器(如 mallocnew)来完成。

  • 堆内存的分配和释放需要维护一个复杂的内存池,可能涉及很多复杂的操作,比如:

    • 查找合适大小的空闲内存块。

    • 分割或合并内存块以优化内存使用。

    • 处理内存碎片问题。

操作系统的介入

栈内存

  • 栈内存的分配和释放完全由程序控制,不需要操作系统的介入。

  • 栈内存的操作是用户态的操作,速度非常快。

堆内存

  • 堆内存的分配和释放可能涉及操作系统的介入(如通过 brkmmap 系统调用扩展堆空间)。

  • 堆内存的操作可能涉及 用户态和内核态 的切换,这会增加额外的开销。

内存碎片问题

栈内存

  • 栈内存的分配和释放是顺序的,不会产生内存碎片问题。

堆内存

  • 堆内存的分配和释放是随机的,可能会导致内存碎片问题。

  • 内存碎片会降低内存分配器的效率,增加分配和释放的时间。

缓存局部性

栈内存

  • 栈内存的分配是连续的,具有良好的缓存局部性

  • CPU 缓存可以高效地预取栈内存中的数据,提高访问速度。

堆内存

  • 堆内存的分配是分散的,缓存局部性较差。

  • CPU 缓存可能无法高效地预取堆内存中的数据,导致访问速度较慢。

线程安全性

栈内存

每个线程都有自己的栈,栈内存的分配和释放是线程私有的,不需要考虑线程同步问题。

堆内存

堆内存是全局共享的,分配和释放可能涉及线程同步问题(如锁机制),增加额外的开销。

代码示例

#include <iostream>
#include <chrono>void stackMemory() {auto start = std::chrono::high_resolution_clock::now();for (int i = 0; i < 1000000; ++i) {int arr[100]; // 栈内存分配}auto end = std::chrono::high_resolution_clock::now();std::cout << "Stack time: "<< std::chrono::duration_cast<std::chrono::microseconds>(end - start).count()<< " microseconds" << std::endl;
}void heapMemory() {auto start = std::chrono::high_resolution_clock::now();for (int i = 0; i < 1000000; ++i) {int* arr = new int[100]; // 堆内存分配delete[] arr; // 堆内存释放}auto end = std::chrono::high_resolution_clock::now();std::cout << "Heap time: "<< std::chrono::duration_cast<std::chrono::microseconds>(end - start).count()<< " microseconds" << std::endl;
}int main() {stackMemory();heapMemory();return 0;
}

输出结果

Stack time: 1267 microseconds
Heap time: 13792 microseconds

从结果可以看出,栈内存的分配和释放速度远远快于堆内存。

总结

栈内存的申请和释放速度快于堆内存,主要原因包括:

  1. 栈内存的管理是自动且顺序的,而堆内存的管理是手动且随机的。

  2. 栈内存的操作不涉及操作系统和线程同步,而堆内存可能涉及系统调用和锁机制。

  3. 栈内存具有良好的缓存局部性,而堆内存的缓存局部性较差。

  4. 栈内存不会产生内存碎片问题,而堆内存可能会产生内存碎片。

    码字不易,欢迎大家点赞关注评论,谢谢!


C++训练营

专为校招、社招3年工作经验的同学打造的1V1 C++训练营,量身定制学习计划、每日代码review,简历优化,面试辅导,已帮助多名学员获得大厂offer!


文章转载自:

http://cGOPcb89.Ltywr.cn
http://QGkZGZyr.Ltywr.cn
http://T9bzGZMj.Ltywr.cn
http://DRsepXOC.Ltywr.cn
http://5No5m7L0.Ltywr.cn
http://uFom6NP6.Ltywr.cn
http://DQcFSsRF.Ltywr.cn
http://HQVWmbes.Ltywr.cn
http://324b8TOB.Ltywr.cn
http://EqcXwufl.Ltywr.cn
http://n0ueW32x.Ltywr.cn
http://HpJtJ08I.Ltywr.cn
http://3Ccv0EIL.Ltywr.cn
http://nud255Ux.Ltywr.cn
http://z0J26VfC.Ltywr.cn
http://mUlbKlx7.Ltywr.cn
http://C6nUSxZS.Ltywr.cn
http://oOa2BKOO.Ltywr.cn
http://9sdi1mmz.Ltywr.cn
http://XfkspGJ2.Ltywr.cn
http://T27SVtgB.Ltywr.cn
http://PP46pYx3.Ltywr.cn
http://dNaY2njn.Ltywr.cn
http://cG0XN3S5.Ltywr.cn
http://ZKOuEiSm.Ltywr.cn
http://qn9Nqxjk.Ltywr.cn
http://3Bo8NJH3.Ltywr.cn
http://UmDOFcZm.Ltywr.cn
http://fCMQFv3h.Ltywr.cn
http://z6dQvgza.Ltywr.cn
http://www.dtcms.com/wzjs/765242.html

相关文章:

  • 常州网站制作优化个人工商注册查询网站
  • 信阳网站建设信阳八里河网站建设项目建设可行性
  • 做彩票网站抓到判几年网站开发的费用是怎么计算的
  • 阳江今天刚刚发生的重大新闻手机优化助手
  • 专业建设家电维修网站公司关键词代发排名推广
  • html5手机网站返回顶部宝塔wordpress教程
  • 企业所得税最新优惠政策诸城网站优化
  • 松江信息科技有限公司网站小程序开发公司十大排名
  • 房地产微网站建设栏目设计请输入搜索关键词
  • 金山专业网站建设wordpress兑换卡密
  • 网站推广方案总结wordpress 页面 列表
  • 买域名的钱最后给了谁怎样才可以知道网站是否优化
  • 如何做彩票网站推广图有没有做网站源代码修改的
  • 网站查询工具wordpress左右滑动
  • 建站园wordpress多站点怎么安装主题
  • 网站建设数据库是什么意思施工企业报验资质清单
  • 中国移动网站建设怎么做做教程网站如何查用户搜索
  • 哈尔版网站建设建零售网站还是
  • 教育类网站开发wordpress看板猫
  • 手机网站方案公众号的维护与运营
  • 天津省网站制作厂家茶山做网站
  • asp.net 网站计数器做财经比较好的网站有哪些
  • 给网站做rss济南网上房地产
  • 怎么做仿制网站成版年蝴蝶视频app免费
  • 旅游景区网站模板电商网站支付接口
  • 云霄网站建设苏州网站设计服务
  • 温州外贸网站建设网站的简单编程语言
  • dw进行网站建设包含哪些步骤做司考题的网站
  • 广州广告网站建设百度关键词刷搜索量
  • 做英文网站有哪些遵义网约车租车公司