草庐IT

易变性

全部标签

java - Java中,String.format()的实现是否考虑了String的不可变性?

由于Java中的字符串是不可变的,所以我一直使用StringBuilder或StringBuffer来连接字符串。String.format()方法是否像StringBuilder或StringBuffer一样处理这个问题?换句话说,String.format()是否像StringBuffer或StringBuilder一样管理内存? 最佳答案 根据OracleJDK的源代码,该实现似乎为每个String#format调用创建了一个新的Formatter,这又分配了一个新的每次调用的StringBuilder。所以是的。但是正如对您

scala - Spark + Scala 转换、不变性和内存消耗开销

我在Youtube上浏览了一些关于Spark的视频架构。尽管惰性评估、发生故障时数据创建的弹性、良好的函数式编程概念是Resilenace分布式数据集成功的原因,但一个令人担忧的因素是由于多个transformations造成的内存开销。由于数据不变性导致内存开销。如果我正确理解这个概念,每次转换都会创建新的数据集,因此内存需求会减少很多次。如果我在我的代码中使用10次转换,将创建10组数据集,我的内存消耗将增加10倍。例如valtextFile=sc.textFile("hdfs://...")valcounts=textFile.flatMap(line=>line.split("

c++ - 为什么 boost::shared_ptr 中的引用计数器不是易变的?

在boost::shared_ptr析构函数,这是完成的:if(--*pn==0){boost::checked_delete(px);deletepn;}哪里pn是指向引用计数器的指针,类型定义为shared_ptr::count_type->detail::atomic_count->long我会期待long成为volatilelong,在shared_ptr中给定线程使用和非原子0-check-and-deletion|上面的析构函数。为什么它不是易变的?编辑:结果我查看了未指定多线程使用时使用的header(atomic_count.hpp)。在atomic_count_win

c++ - 涉及带有易变变量的表达式的简单语句的正确行为?

考虑以下语句volatileinta=7;a;//statementAvolatileint*b=&a;*b;//statementBvolatileint&c=a;c;//statementC现在,我一直试图在标准中找到一个要点,告诉我编译器在遇到这些语句时的行为方式。我所能找到的只是A(可能还有C)给了我一个左值,B也给了我一个左值:“§5.1.1.8基本表达式-一般”说Anidentifierisanid-expressionprovidedithasbeensuitablydeclared(Clause7).[..][..]Theresultistheentitydenoted

c++ - C++ 纯虚函数调用的性能可变性

我必须设计和开发一个将在实时环境中使用的C++模块(它将在现代多核PC上运行)。当我设计它时,我创建了C++接口(interface)(只有纯虚拟成员函数的类),并且我使用依赖注入(inject)以便能够使用GoogleMockFramework对其进行测试。我知道这种方法与静态绑定(bind)相比具有运行时性能开销,但可测试性是一个重要因素。我认为我们可以在开发期间测量执行时间,并在集成阶段运行测试以确定性能开销是否可以接受。在过去的几天里,我收到了批评,说这种方法行不通,因为后期绑定(bind)具有不确定性。这种不确定性意味着即使我对其进行测试并测量执行时间,稍后在生产环境中执行时

c++ - 使 thread_local 变量完全易变

我正在开发一个使用用户级上下文切换(使用Boost::Context)的运行时库,但在使用thread_level变量时遇到了问题。考虑以下(简化的)代码:thread_localint*volatiletli;intmain(){tli=newint(1);//part1,donebythread1UserLevelContextSwitch();intli=*tli;//part2,donebythread2cout由于对thread_local变量有两次访问,编译器将main函数转换为类似以下行的内容(与汇编相反):registerint**ptli=&tli;//cachead

windows - Windows 中的原子性、易变性和线程安全

我对原子性的理解是,它用于确保一个值将被整体而不是部分地读/写。例如,一个64位值实际上是两个32位DWORD(此处假设x86)在线程之间共享时必须是原子的,以便同时读/写两个DWORD。这样一来,一个线程就无法读取未更新的一半变量。如何保证原子性?此外,我的理解是波动性根本不能保证线程安全。是真的吗?我已经看到它在很多地方暗示简单的原子/volatile是线程安全的。我不明白那是怎么回事。我是否也不需要内存屏障来确保任何值(无论是原子值还是其他值)在实际保证在其他线程中被读/写之前被读/写?例如,假设我创建了一个挂起的线程,进行一些计算以将一些值更改为线程可用的结构,然后恢复,例如:

c++ - 如何适应写入 tcp 套接字的时间可变性?

作为测试,我正在将一系列字节数组写入Android应用程序的tcp套接字,并在C++应用程序中读取它们。JavaInetAddressaddress=InetAddress.getByName("192.168.0.2");Socketsocket=newSocket(address,1300);DataOutputStreamout=newDataOutputStream(socket.getOutputStream())...if(count==0){out.write(first,0,first.length);}elseif(count==1){out.write(second

objective-c - let/var 是如何解决可变性的?

这个问题在这里已经有了答案:Immutable/MutableCollectionsinSwift(7个答案)关闭5年前。我没有任何问题,我只是想澄清一下有关可变性的问题。在Objective-C中,我们会使用例如NSMutableArray来获取可变数组,并使用NSArray来获取不可变数组。我不太了解这两者的内部工作原理,但据我所知,我认为不同之处在于NSArray只保留一定数量的内存,这使得它更适合初始值高效,而NSMutableArray不知道它需要多少内存。大概这意味着NSMutableArray有指向内存位的指针,这些内存位遍布整个地方,而不是像NSArray那样一个接一个

深度学习之超分辨率,视频增强基础:光流估计与可变性卷积

目录一、帧对齐简介     二、显式帧对齐:光流估计+运动补偿三、隐式帧对齐:可变性卷积四、几个疑问1.为什么要进行帧对齐2.光流估计为什么可以应用视频插帧?3.光流估计和可变性卷积的区别4.运动幅度很大对可变性卷积有什么影响?一、帧对齐简介     在进行视频超分辨率、压缩视频增强等任务的时候,我们通常会把目标帧和参考帧进行帧对齐,而帧对齐分为两种:显式帧对齐(光流估计+运动补偿)、隐式帧对齐(可变性卷积、3D卷积、循环神经网络等,这里只讲可变性卷积)。二、显式帧对齐:光流估计+运动补偿       给定两个输入图像(前一帧:图1-后一帧:图2),我们的目标是找到每个像素的运动向量,光流就是