处理数据流时,例如来自网络的请求,通常会使用一些临时存储器。例如,URL可能会分成多个字符串,每个字符串可能会从堆中分配内存。这些实体的使用通常是短暂的,总内存量通常相对较小,并且应适合于CPU缓存。
释放临时字符串所使用的内存时,字符串内容可能仅存在于缓存中。然而,CPU不知道内存已被解除分配:解除分配只是内存管理系统中的更新。因此,当CPU缓存用于其他内存时,CPU可能会不必要地将未使用的内容写入实际内存 - 除非内存释放以某种方式向CPU指示不再使用该内存。因此,问题变为:
释放内存的内存管理函数是否以某种方式指示相应内存的内容可以被丢弃?甚至有没有办法向CPU指示不再使用内存?(至少对于某些CPU:显然,不同的架构之间可能存在差异)。由于不同的实现可能在质量上有所不同,可能会或可能不会做任何花哨的事情,因此问题实际上是是否有任何内存管理实现指示内存未使用?
我确实意识到,始终使用相同的内存区域可能是一种缓解策略,以避免不必要的写入实际内存。在这种情况下,将使用相同的缓存内存。同样,内存分配可能总是产生相同的内存,从而避免不必要的内存传输。但是,可能我不需要依赖任何这些适用性技术。
释放临时字符串所使用的内存时,字符串内容可能仅存在于缓存中。然而,CPU不知道内存已被解除分配:解除分配只是内存管理系统中的更新。因此,当CPU缓存用于其他内存时,CPU可能会不必要地将未使用的内容写入实际内存 - 除非内存释放以某种方式向CPU指示不再使用该内存。因此,问题变为:
释放内存的内存管理函数是否以某种方式指示相应内存的内容可以被丢弃?甚至有没有办法向CPU指示不再使用内存?(至少对于某些CPU:显然,不同的架构之间可能存在差异)。由于不同的实现可能在质量上有所不同,可能会或可能不会做任何花哨的事情,因此问题实际上是是否有任何内存管理实现指示内存未使用?
我确实意识到,始终使用相同的内存区域可能是一种缓解策略,以避免不必要的写入实际内存。在这种情况下,将使用相同的缓存内存。同样,内存分配可能总是产生相同的内存,从而避免不必要的内存传输。但是,可能我不需要依赖任何这些适用性技术。
free()
还是delete
,因此我们可以安全地忽略这些差异。 - MSalters语言无关
的问题在于对于95%的编程语言来说这个问题毫无意义。而且我们也没有标签来描述“高性能语言,可以编译成本地应用程序,并具有确定性显式内存释放”的情况。 - MSaltersglibc
不太可能使用libstdc++
没有的缓存技巧。顺便说一下,大多数语言的运行时/解释器都是基于C库构建的!尽管最高悬赏金,但我也分享OP对缺乏曝光的担忧,只有88个浏览量。 - Iwillnotexist Idonotexist