首页 > 系统相关 >程序中提升几毫秒、节省几KB的内存有必要吗?

程序中提升几毫秒、节省几KB的内存有必要吗?

时间:2024-11-23 12:34:24浏览次数:8  
标签:KB 性能 硬件 毫秒 安迪 内存 软件 比尔

今天看到一个话题:程序中节省几KB的内存有必要吗?

有人说:“我在写程序的时候,更改一个判断语句,会提升几毫秒,换一种方法会节省几KB,这些有必要吗?”

看到这个问题,我的第一反应是——安迪-比尔定律。


安迪-比尔定律

近年来,随着科技的飞速发展,手机、电脑等电子设备的硬件性能不断提升,内存容量也越来越大。

然而,许多用户却发现,设备在使用一段时间后,性能开始下降,甚至变得卡顿。

这究竟是为什么呢?难道是硬件性能退化了吗?

其实,这背后隐藏着一个有趣的定律——安迪-比尔定律。

安迪-比尔定律是对IT产业中软件和硬件升级换代关系的一个概括,其原话是“Andy gives, Bill takes away.(安迪提供什么,比尔拿走什么。)”。

安迪指的是英特尔前CEO安迪·格鲁夫,比尔指的是微软前任CEO比尔·盖茨。

这句话形象地揭示了硬件和软件之间相互制约又相互促进的微妙关系,它的含义是,硬件性能的提升,很快就被软件的不断更新和膨胀所消耗殆尽。

硬件升级,软件膨胀  

想象一下,你刚入手了一款最新款的智能手机,它拥有强大的处理器和充足的内存。

你兴致勃勃地下载了各种应用程序,并期待着流畅的使用体验。

然而,随着时间的推移,你发现手机越来越卡顿,甚至出现应用程序崩溃的情况。

这并非是手机硬件性能退化所致,而是因为软件的不断更新和膨胀,导致对硬件资源的占用越来越大。

以手机游戏为例,当一款游戏刚发布时,它的体积相对较小,运行流畅,不会占用太多硬件资源。

然而,随着游戏开发商不断更新游戏内容,添加新的功能和特效,游戏的体积也会随之膨胀,对手机的内存和处理器性能要求也越来越高。

那么为什么软件可以吃掉硬件的性能呢?

造成这种现象的原因,除了软件本身的更新迭代之外,更重要的是,现在的应用程序开发者,几乎很难再有节省几KB内存的意识了。

在嵌入式或芯片开发领域,程序员需要尽可能地节省内存空间,因为芯片的片上存储资源非常宝贵,多出几十KB的存储,都会有意想不到的系统性能提升。

而在应用层开发领域,例如手机APP开发,开发者往往不会过多关注内存占用问题。

因为现在的手机拥有巨大的存储空间,几KB的内存节省对于整体性能的影响微不足道。

开发者更倾向于追求功能的完善和用户体验的提升,而忽视代码优化和内存管理。

超级玛丽:64KB的奇迹  

与现在的应用程序相比,早期的游戏开发者对内存管理有着深刻的理解。

以经典游戏超级玛丽为例,这款游戏包含了丰富的关卡、剧情、配图和配乐,但它的总大小仅为64KB!

12

这主要是因为,在超级玛丽那个年代,芯片上的硬件资源非常有限,游戏开发者为了节省内存,进行了大量的代码优化和图片复用优化。

例如,游戏中所有的障碍物都是由多个小的正方形图片拼接而成,而在内存中,只存储了一个正方形图片,通过不同的排列组合来实现不同的障碍物。

安迪-比尔定律揭示了软件和硬件之间的相互制约关系。

软件的不断更新和膨胀,会消耗硬件性能的提升,最终导致硬件需要进一步升级。

然而,这种现象并非不可避免。如果开发者能够更加重视代码优化和内存管理,减少软件膨胀,那么硬件性能的提升就能真正地转化为用户体验的提升。

未来,软件开发需要更加注重资源节约和性能优化,才能真正实现硬件性能的充分利用,为用户带来更流畅、更便捷的使用体验。

标签:KB,性能,硬件,毫秒,安迪,内存,软件,比尔
From: https://blog.csdn.net/m0_69824302/article/details/143990390

相关文章

  • c语言:动态内存管理中的malloc和free,calloc和realloc
    为什么要有动态内存分配?通过之前的学习,我们已经掌握的内存开辟方式有:inta=20;//在栈空间上开辟四个字节chararr[10]={0};//在栈空间上开辟10个字节的连续空间上述空间的开辟的大小是固定的数组在申明的时候,必须指定数组的长度,数组空间一旦确定了大小不能进行调整。......
  • c语言之正负整数在内存中的存储本质
    int、short、long、longlong是如何定义变量的        我们先从最为我们所知的定义变量入手,当我们用int定义一个变量的时候,这个变量是整型,长度是4个字节,不同的操作系统下由int定义的变量长度有可能不同,当然对于short、long、longlong也是同样如此,因此为了使大家更清......
  • C语言:动态内存管理
    目录为什么要有动态内存管理mallocfreecallocrealloc为什么要有动态内存管理内存分为栈区、堆区、静态区,每个区存放的变量如下图:目前我们掌握的内存开辟方法有:创建结构体structs{inti;intc;};创建一些变量:intx;intu[10];charl;还有创建联合等…......
  • C++ 内存管理 堆和栈、内存泄漏、内存分配、指针与内存、智能指针、malloc和free、new
    1.堆和栈的区别1.**管理方式**:-**栈**:自动管理。当函数调用时,局部变量会自动分配在栈上。函数执行完毕后,这些变量会自动释放。-**堆**:手动管理。程序员需要使用`new`来在堆上分配内存,并在不再需要时使用`delete`来释放。2.**使用方式和寿命**:-**栈**:用......
  • 【C++干货篇】——C/C++内存管理
    【C++干货篇】——C/C++内存管理文章目录【C++干货篇】——C/C++内存管理1.C/C++内存分布1.1静态区/数据段:1.2常量区/代码段:1.3栈:1.4堆:1.5.内存映射区:2.C语言中动态内存管理方式:`malloc/calloc/realloc/free`1.`malloc`2.`calloc`3.`realloc`总结3.C++内存管理方......
  • 内存优化的秘密:深入理解 Linux 中的 madvise
    madvise是一个在Linux和其他类Unix操作系统中使用的系统调用,用于向内核提供关于内存映射区域的建议。它可以帮助操作系统优化内存使用,以提高性能。使用场景madvise函数通常用于以下几种情况:预取数据:如果应用程序知道将来会使用某些数据,可以建议操作系统提前加载这些数据到内......
  • 关于Workbench命令流的插入
    引言Workbench虽然自身的功能强大,但是有些功能还需要插入命令流实现:(1)命令流可以实现材料模型的定义和部分单元的控制;(2)命令流可以实现对接触对的实常数和关键字的控制;(3)命令流可以实现对求解的补充控制;(4)命令流可以补充后处理的功能。1、前处理的插入命令KEYOPT,ITY......
  • podman 无根用户分配系统CPU、内存等系统资源,提示cgroup相关权限不足
    问题:在使用Podman以无根用户(rootless)模式创建容器时,如果遇到分配系统CPU等资源时提示cgroup权限不足,这是因为无根用户没有直接访问cgroup相关资源的权限。以下是一些解决方法(目前采用的办法3临时解决,,主要是更改系统目录权限sudochown-R$USER:$USER/sys/fs/cgro......
  • jsp风景区管理系统dkkbe--(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,景点信息,景点分类,门票订单,系统公告,旅游路线开题报告内容一、课题背景与意义随着旅游业的蓬勃发展,风景区作为重要的旅游资源,其管理效率和游客体验成为......
  • 用C++实现自己的智能指针:深入探讨内存管理与RAII模式
    解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界C++中的内存管理一直以来是程序员的一个难点,尤其是在处理动态内存分配时。智能指针(如std::unique_ptr和std::shared_ptr)通过RAII(资源获取即初始化)的设计理念,极大地简化了动态内存的管理,减少了内存泄漏的风险。然......