标签: micro-optimization

控制类成员布局和析构函数顺序

我的班级有两名成员。

class C {
    typeA a;
    typeB b;
};
Run Code Online (Sandbox Code Playgroud)

假设没有继承。对于这门课,我担心三件事。

  1. a和 的构造函数的b调用顺序
  2. a和 的析构函数的b调用顺序
  3. ab在内存中的布局

我可能关心(1)和(2)的原因之一是线程同步。我可能关心 (3) 的一些原因是:

  1. 填充

  2. 具有两个以上类成员的空间局部性

  3. 第一个类成员的内存偏移量为 0

我希望能够同时控制(1)-(3)。然而,似乎当我选择内存中的顺序时,我也选择了构造函数和析构函数的顺序。有没有办法同时控制(1)-(3)?

c++ constructor destructor class micro-optimization

1
推荐指数
1
解决办法
139
查看次数

优化Java代码

我该如何优化此代码?我制作了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)

java optimization filtering ip-address micro-optimization

0
推荐指数
1
解决办法
1410
查看次数

访问类成员时的性能

我正在写一些性能关键的东西,想知道如果我使用它是否会有所作为:

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++专家来说很明显,所以我现在不会尝试为它写一个不切实际的基准

c++ micro-optimization

0
推荐指数
1
解决办法
192
查看次数

PHP中的键与in_array()的微优化

因此,您可以选择构建数组,因为您知道在代码中需要检查数组中是否存在值.我看到它的方式至少有两个选择:

$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)

你会选择哪种方法?为什么?您是否只是为了减少处理时间或减少使用的内存量?

也许你不会使用我的两个微不足道的方法,并有另一种很棒的方法来解决这个简单的问题.

这是一个没有考虑真实世界应用的理论问题,但阵列中可能有数千个选项.这是一个推测性的问题,真正看到每个人都认为哪种方法更好.是否因为可读性,速度或内存使用原因而被认为是这样.

php optimization micro-optimization

0
推荐指数
1
解决办法
615
查看次数

带循环和类型C#的高效代码


我想在下面的代码值类型中找出更有效(如果是甚至)的内容

ForEach(string s in strings)
{
  string t = s;
}
// or
string t;
ForEach(string s in strings)
{
   t = s;
}
Run Code Online (Sandbox Code Playgroud)

和引用类型有什么不同.

.net c# optimization foreach micro-optimization

0
推荐指数
2
解决办法
328
查看次数

C++:访问int的特定八位字节的最快方法

假设我们有32位整数,8位字符,gcc编译器和英特尔架构:

什么是最快的方式(没有汇编程序使用)来提取,比如说,整数变量的第三个八位字节?例如,将它存储到char []的某个特定位置的char中?

c++ optimization micro-optimization

0
推荐指数
1
解决办法
1522
查看次数

这段代码无效/慢吗?

可能重复:
如何读取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)

php performance foreach micro-optimization

0
推荐指数
1
解决办法
106
查看次数

比较C++中&vs%的速度

在C++命令中是真的吗?

n&1

更快,使用更少的内存

n%2?

(其中n是int类型)

更全局,有没有办法比使用%运算符更快地找到模2的整数残差?提前致谢.

c++ performance modulo micro-optimization bitwise-and

0
推荐指数
1
解决办法
214
查看次数

使用RSI/RDI vs r8-r15(速度优化)

我想尽可能地优化我的函数,我做的一件事就是使用r8作为指针,因为这是指针在x64函数中被推入的寄存器.

但是推送RSI或RDI,将指针移动到它们并在循环中更快地使用它们?

例如,mov [RSI],DL;将编译为2个字节和:mov [r8],DL; 将编译为3个字节

所以,如果我做了100到200次循环,r8会因为要解码的额外字节而变慢吗?或推动RSI并移动指针消除任何可能的速度增加?显然push和mov会在循环外发生.

optimization assembly x86-64 masm micro-optimization

0
推荐指数
1
解决办法
129
查看次数

具有可以发送给free()的占位符char *的最有效方法是什么?

我正在开发一个程序,我们在竭尽所能地提高性能,现在我们进入了微优化阶段(同时避免了非严格必要的代码重复)。

想象一下这样的小代码:

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中发生的事件,其中一些会复制空字符串。

c micro-optimization

0
推荐指数
1
解决办法
96
查看次数