我是否应该逐行读取文件时积极释放内存?一个例子:
while (<FILE>) {
my $line = $_;
<process line>
undef($line);
}
Run Code Online (Sandbox Code Playgroud)
"Undefing"$ line变量是减少内存消耗的好选择吗?
我想知道单独执行条件循环需要多长时间.就像我可以选择使用"if else","while","for"或"foreach"循环那么循环会更快地执行.我知道差异会非常小,大多数人会说它不会但是,如果我有一个可以访问数千个数据的程序,那么这一点就会出现.
我想知道我是否在java的开头声明了一个变量,如果我在使用它之前声明它将会有所不同.是否会减少所需的总时间?如果是,则实际使用哪一个(变量在开头声明或者它们刚被声明为b4的那个被使用)?
在C中,最好的方法是查看一个数字是否可以被另一个数除尽?我用这个:
if (!(a % x)) {
// this will be executed if a is divisible by x
}
Run Code Online (Sandbox Code Playgroud)
反正哪个更快?我知道这样做,即130%13将导致每10次做130/13.因此,只需要一个循环就有10个循环(我只想知道130是否可以被13整除).
谢谢!
这是微优化,还是优化呢?
void Renderer::SetCamera(FLOAT x, FLOAT y, FLOAT z) {
// Checking for zero before doing addition?
if (x != 0) camX += x;
if (y != 0) camY += y;
if (z != 0) camZ += z;
// Checking if any of the three variables are not zero, and performing the code below.
if (x != 0 | y != 0 | z != 0) {
D3DXMatrixTranslation(&w, camX, camY, camZ);
}
}
Run Code Online (Sandbox Code Playgroud)
使用带有vector.size()的条件运行for循环会强制应用程序重新计算每个循环中向量中的元素吗?
std::vector<UINT> vect;
INT vectorSize = vect.size();
for …Run Code Online (Sandbox Code Playgroud) 这个问题是关于我们如何将整数与常数相乘.那么让我们看一个简单的函数:
int f(int x) {
return 10*x;
}
Run Code Online (Sandbox Code Playgroud)
如何最佳地优化该功能,尤其是在内联到呼叫者时?
方法1(由大多数优化编译器生成(例如,在Godbolt上))
lea (%rdi,%rdi,4), %eax
add %eax, %eax
Run Code Online (Sandbox Code Playgroud)
方法2(使用clang3.6和更早版本,使用-O3生成)
imul $10, %edi, %eax
Run Code Online (Sandbox Code Playgroud)
方法3(使用g ++ 6.2生成,无需优化,删除存储/重新加载)
mov %edi, %eax
sal $2, %eax
add %edi, %eax
add %eax, %eax
Run Code Online (Sandbox Code Playgroud)
哪个版本最快,为什么?主要对英特尔Haswell感兴趣.
是否可以在一次操作中从byte []数组中获取4个字节?
这意味着代替:
var octet_a = bytes[i++];
var octet_b = bytes[i++];
var octet_c = bytes[i++];
var octet_d = bytes[i++];
Run Code Online (Sandbox Code Playgroud)
得到类似的东西
Int32 b4= Get4Bytes(i);
i=i+4;
Run Code Online (Sandbox Code Playgroud) 经过大约100亿次测试,如果imm64比m64AMD64快0.1纳秒,m64似乎更快,但我真的不明白。val_ptr以下代码中的地址本身不是立即数吗?
# Text section
.section __TEXT,__text,regular,pure_instructions
# 64-bit code
.code64
# Intel syntax
.intel_syntax noprefix
# Target macOS High Sierra
.macosx_version_min 10,13,0
# Make those two test functions global for the C measurer
.globl _test1
.globl _test2
# Test 1, imm64
_test1:
# Move the immediate value 0xDEADBEEFFEEDFACE to RAX (return value)
movabs rax, 0xDEADBEEFFEEDFACE
ret
# Test 2, m64
_test2:
# Move from the RAM (val_ptr) to RAX (return value)
mov …Run Code Online (Sandbox Code Playgroud) 我正在优化瓶颈代码:
int sum = ........
sum = (sum >> _bitShift);
if (sum > 32000)
sum = 32000; //if we get an overflow, saturate output
else if (sum < -32000)
sum = -32000; //if we get an underflow, saturate output
short result = static_cast<short>(sum);
Run Code Online (Sandbox Code Playgroud)
我想将饱和条件写为一个"if condition",或者甚至更好,没有"if condition"来使这段代码更快.我不需要精确饱和值为32000,任何类似的值如32768都是可以接受的.
根据此页面,ARM中有一个饱和指令.在x86/x64中有类似的东西吗?
我正在寻找一种公式/方法来衡量一条指令的速度,或者更具体地说是通过CPU周期给出每条指令的"得分".
我们以下面的汇编程序为例,
nop
mov eax,dword ptr [rbp+34h]
inc eax
mov dword ptr [rbp+34h],eax
Run Code Online (Sandbox Code Playgroud)
以及英特尔Skylake的以下信息:
mov r,m:吞吐量= 0.5延迟= 2
mov m,r:吞吐量= 1延迟= 2
nop:吞吐量= 0.25延迟=非
inc:吞吐量= 0.25延迟= 1
我知道程序中指令的顺序在这里很重要,但我希望创建一些通用的东西,不需要"对单循环准确"
任何人都知道我该怎么做?
非常感谢
基本上,我很难使执行时间比实际时间要短,并且要减少时钟周期和内存大小。有谁知道我该怎么做吗?代码工作正常,我只想稍作更改。
编写了有效的代码,但不想弄乱代码,但也不知道要进行哪些更改。
; Calculation of a factorial value using a simple loop
; set up the exception addresses
THUMB
AREA RESET, CODE, READONLY
EXPORT __Vectors
EXPORT Reset_Handler
__Vectors
DCD 0x00180000 ; top of the stack
DCD Reset_Handler ; reset vector - where the program starts
AREA 2a_Code, CODE, READONLY
Reset_Handler
ENTRY
start
MOV r1,#0 ; count the number of multiplications performed
MOV r2,#3 ; the final value in the factorial calculation
MOV r3,#1 ; the factorial result will be stored …Run Code Online (Sandbox Code Playgroud)