加载时间,遍历时间,不同数据段C/C 的内存使用率
Load time, traversal time, memory usage for different data segments C/C++
我想进一步了解不同数据段中变量的遍历时间。例如,可以说我们想用100 000 int填充数组。如果数组在堆栈,堆或数据段中,则遍历时间有什么区别?如果我们使用很多更大或较小的数组,这会有任何区别 - 解释:,例如,堆中的遍历时间为100 000 Elemnts 2倍,而对于堆栈中的1倍,如果我们有不同的情况,此比例会相同尺寸(10 000 000(?另外,过程的加载时间和总体内存使用情况有什么区别?谢谢!
编辑:如何在代码中确定这一点?我的意思是 - 是否有任何功能可以计算执行时间,"遍历时间"以及我想找出的其他内容?
要回答您的编辑问题,您可以使用计时器。您在执行代码之前启动计时器并在此之后立即停止。然后减去停止启动以找出椭圆形的时间。
已经在这里回答
内存是内存
我的意思是:不同的段(堆栈,堆等(没有物理不同的记忆。此外,内存是随机访问存储器。RAM内存的一个属性是,无论数据在芯片上物理上或以前的访问中,访问数据都需要相同的时间(对比此磁带内存,甚至硬盘(。因此,无论我们是在谈论堆,堆栈或其他任何东西,对RAM的访问都是不可分割的。
缓存到救援
话虽如此,这不是整个故事。现代体系结构有缓存。关于缓存的讨论在这里太广泛了,但要旨是缓存较小,更昂贵但更快的记忆"缓存" RAM的数据。因此,在实际情况下,在(时间局部(或附近访问的数据(很可能(将更快地送入CPU,因为它可以在CACHE中使用。
好吧,很好,但是哪个段更快?
通常,我们说堆栈内存比内存更快。就像第1段一样,当我在思考的时候,这让我亲自感到困惑。但是您考虑了第2段,这是有道理的。由于使用模式,堆栈几乎总是在缓存中。
所以...使用堆栈?
不幸的是,它并不那么简单。从来没有,尤其是当您分析低级性能时。堆栈不能很大。有时,即使您可以将数据放在堆栈上,还有其他原因选择将其放在堆上。因此,我很抱歉(不是真的(告诉您,答案从来都不是简单的或黑白的。您实际上可以做的就是 profile 您的应用程序并亲自查看。那相对容易。解释结果并知道如何改善它们是另一只野兽。
如果,例如,堆中的遍历时间为100 000 Elemnts和1倍的堆栈,如果我们有这个比例,如果我们有 不同的尺寸(10 000 000(
即使说,只有堆的性能也不是线性的。为什么?好吧,再次缓存。当访问适合缓存中的内存时,性能效果不错,然后您会看到尖峰,就像数据生长超过缓存(线路(大小一样。在相对较旧的系统上,您有3个不错的区域清楚地界定了与计算机中的3个缓存级别相对应的。当您的数据从安装到更高的水平上,当它完全不适合缓存时,您会看到尖峰。现代处理器具有"智能缓存",它具有一些黑魔法使它看起来更大,因为您有1个大缓存而不是3个级别。
- C++为构建时间获取QDateTime的可靠方法
- 从持续时间构造std::chrono::system_clock::time_point
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- while循环中while循环的时间复杂度是多少
- 使用简单类型列表实现的指数编译时间.为什么
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 在已经使用Git的情况下减少编译时间
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 从文本文件中读取时钟时间和事件时间并进行处理
- 具有未知值时的时间复杂性
- 如何减少花费的时间
- C++在变量给定的指定时间内关闭电脑
- rcpp函数中的清理时间很长
- C++:floor unix时间戳到UTC月份
- 如何在c++中录制具有精确帧时间戳的视频
- 对于等待以 std::future wait() 返回的函数的 CPU 使用率或检查标志在循环中休眠一段时间哪个更好?
- 一段时间后 CPU 使用率高
- 加载时间,遍历时间,不同数据段C/C 的内存使用率
- C、 所有平台中进程的C++CPU使用率和内存使用率+当前时间的可用网络下行链路带宽