我对编程很困惑。如果我们在objective-c中执行此操作,它在内存方面有何不同:
+(NSString *)getName {
NSString *name = @"Hello";
return name;
}
OR
+(NSString *)getName {
return @"Hello";
}
两者在速度和性能方面是否相同或存在差异?
答案 0 :(得分:8)
编译器会将第一个示例优化为第二个示例,因为该变量不用于其他任何内容。所以它们是等价的:没有一个更快,没有任何记忆。
修改强>
所以,我实际上尝试过并比较了汇编程序输出。
使用的代码:
@implementation Test
- (NSString *)test1 {
NSString *variable = @"Hello1";
return variable;
}
- (NSString *)test2 {
return @"Hello2";
}
@end
使用的编译器:
Apple LLVM 5.0版(clang-500.2.79)(基于LLVM 3.3svn)目标: x86_64的-苹果darwin13.0.0
没有优化(-O0
),test1
确实拥有未使用变量(movq %rax, -24(%rbp)
和movq -24(%rbp), %rax
的代码,因此需要另外一个内存写入和读取)。但是已经在-O1
处对变量进行了优化(内部self
和_cmd
变量的读取也是如此)。
换句话说:使用-O0
(无优化),test1
确实比test2
慢。但是,如果开启优化,它们是等效的,并产生相同的代码。