我的班级有两名成员。
class C {
typeA a;
typeB b;
};
Run Code Online (Sandbox Code Playgroud)
假设没有继承。对于这门课,我担心三件事。
a和 的构造函数的b调用顺序a和 的析构函数的b调用顺序a和b在内存中的布局我可能关心(1)和(2)的原因之一是线程同步。我可能关心 (3) 的一些原因是:
填充
具有两个以上类成员的空间局部性
第一个类成员的内存偏移量为 0
我希望能够同时控制(1)-(3)。然而,似乎当我选择内存中的顺序时,我也选择了构造函数和析构函数的顺序。有没有办法同时控制(1)-(3)?
我该如何优化此代码?我制作了IPFilter,我需要优化它.
package com.ipfilter;
import java.util.HashMap;
import java.util.Map;
/**
* IPFilter
*
* Loads given IP addresses to memory, so you can easily check if ip addres has been blocked
*/
public class IPFilter {
private Map<Integer, IPFilter> filter = new HashMap<Integer, IPFilter>();
/**
* Convert String ip address to Integer array and then calls add ip method
* @param ip
* @return
*/
public void addIP(String ip)
{
int[] numbers = convert(ip);
addIP(numbers, 0);
}
/**
* Convert String ip …Run Code Online (Sandbox Code Playgroud) 我正在写一些性能关键的东西,想知道如果我使用它是否会有所作为:
int test( int a, int b, int c )
{
// Do millions of calculations with a, b, c
}
Run Code Online (Sandbox Code Playgroud)
要么
class myStorage
{
public:
int a, b, c;
};
int test( myStorage values )
{
// Do millions of calculations with values.a, values.b, values.c
}
Run Code Online (Sandbox Code Playgroud)
我确信这对C++专家来说很明显,所以我现在不会尝试为它写一个不切实际的基准
因此,您可以选择构建数组,因为您知道在代码中需要检查数组中是否存在值.我看到它的方式至少有两个选择:
$values_array = array(
'my_val',
'my_val2',
'and_so_on',
);
if(in_array('my_val', $values_array)) {
var_dump('Its there!');
}
Run Code Online (Sandbox Code Playgroud)
或者您可以使用关联数组并使用键来包含您的值:
$values_array = array(
'my_val' => '',
'my_val2' => '',
'and_so_on' => '',
);
if(isset($values_array['my_val'])) {
var_dump('Its there!');
}
Run Code Online (Sandbox Code Playgroud)
你会选择哪种方法?为什么?您是否只是为了减少处理时间或减少使用的内存量?
也许你不会使用我的两个微不足道的方法,并有另一种很棒的方法来解决这个简单的问题.
这是一个没有考虑真实世界应用的理论问题,但阵列中可能有数千个选项.这是一个推测性的问题,真正看到每个人都认为哪种方法更好.是否因为可读性,速度或内存使用原因而被认为是这样.
我想在下面的代码值类型中找出更有效(如果是甚至)的内容
ForEach(string s in strings)
{
string t = s;
}
// or
string t;
ForEach(string s in strings)
{
t = s;
}
Run Code Online (Sandbox Code Playgroud)
和引用类型有什么不同.
假设我们有32位整数,8位字符,gcc编译器和英特尔架构:
什么是最快的方式(没有汇编程序使用)来提取,比如说,整数变量的第三个八位字节?例如,将它存储到char []的某个特定位置的char中?
可能重复:
如何读取PHP foreach循环中的数组?
如果我有这个功能:
function getList()
{
$list = array();
$list['foo'] = 'Foo';
$list['bar'] = 'Bar';
return $list;
}
Run Code Online (Sandbox Code Playgroud)
然后我这样做:
foreach ( getList() as $item )
{
echo $item.'<br>';
}
Run Code Online (Sandbox Code Playgroud)
这个代码会比这样做慢吗:
$list = getList();
foreach ( $list as $item )
{
echo $item.'<br>';
}
Run Code Online (Sandbox Code Playgroud) 在C++命令中是真的吗?
n&1
更快,使用更少的内存
n%2?
(其中n是int类型)
更全局,有没有办法比使用%运算符更快地找到模2的整数残差?提前致谢.
我想尽可能地优化我的函数,我做的一件事就是使用r8作为指针,因为这是指针在x64函数中被推入的寄存器.
但是推送RSI或RDI,将指针移动到它们并在循环中更快地使用它们?
例如,mov [RSI],DL;将编译为2个字节和:mov [r8],DL; 将编译为3个字节
所以,如果我做了100到200次循环,r8会因为要解码的额外字节而变慢吗?或推动RSI并移动指针消除任何可能的速度增加?显然push和mov会在循环外发生.
我正在开发一个程序,我们在竭尽所能地提高性能,现在我们进入了微优化阶段(同时避免了非严格必要的代码重复)。
想象一下这样的小代码:
propertyContent = gets_x_prop( propStruct );
propertyContent = ( propertyContent ? propertyContent : strdup("") );
/// ....
/// ....
/// ....
free(propertyContent)
Run Code Online (Sandbox Code Playgroud)
做出了决定,我们确定下一个要考虑攻击的是对空字符串strdup的许多调用。
请记住,我们需要有一个char*in变量,以简化随后出现的代码并使之更直接(避免引起的错误(void*)0)
问题在于如何优化它……
到目前为止,我们只能实现一个自定义函数:
char* a = malloc(1);
a[0] = NULL;
Run Code Online (Sandbox Code Playgroud)
我们认为,这种方法应该有其他选择。我们还不希望将所有内容替换free()为执行NULL检查的宏,因为我们认为它对我们来说很难。
我们自己的测量表明,当前,等待时间最多的是在malloc中,例如strdup中发生的事件,其中一些会复制空字符串。
optimization ×5
c++ ×4
foreach ×2
performance ×2
php ×2
.net ×1
assembly ×1
bitwise-and ×1
c ×1
c# ×1
class ×1
constructor ×1
destructor ×1
filtering ×1
ip-address ×1
java ×1
masm ×1
modulo ×1
x86-64 ×1