小编Jan*_*sis的帖子

将原始类型的常量引用作为函数参数传递

考虑以下功能:

template <class T, class Priority>
void MutableQueue<T, Priority>::update(const T& item, const Priority& priority)
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

如果优先级类型可以放在寄存器中,那么现代x86-64编译器是否足够智能以按值传递优先级参数而不是引用?

c++ compiler-optimization

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

自定义池分配器std :: list

我正在编写一个与std :: list一起使用的自定义分配器.列表大小将始终限制为一个较小的数字,列表元素将在约束树搜索算法中非常频繁地分配和释放,因此我认为自定义池分配器(从堆栈中分配元素)应该提高性能.

我的问题是std :: list如何分配用于存储链接/节点的数据结构.它将使用自定义分配器来分配元素,但如果节点仍然从堆中分配,那么这将不会有太大帮助.

这是我正在实现的自定义分配器:

#include <algorithm>
#include <cassert>

template <class Tp, std::size_t N>
class PoolStackAllocator {

public:
    typedef Tp value_type;
    typedef value_type* pointer;
    typedef const value_type* const_pointer;
    typedef value_type& reference;
    typedef const value_type& const_reference;
    typedef std::size_t size_type;
    typedef std::ptrdiff_t difference_type;

    template<typename U>
    struct rebind {
        typedef PoolStackAllocator<U, N> other;
    };

    inline explicit PoolStackAllocator() : data_size_(0) {}

    template <class U, std::size_t M>
    inline explicit PoolStackAllocator(const PoolStackAllocator<U, M>& other) : data_size_(other.data_size_) {
        typename PoolStackAllocator<U>::const_pointer i = other.data_;
        typename PoolStackAllocator<U>::const_pointer …
Run Code Online (Sandbox Code Playgroud)

c++ memory-management std stdlist

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

如何在不物理创建结构的情况下获取结构的 Reflect.Type 实例?

我想创建一个结构类型注册表,以动态加载“Project Euler”问题的解决方案。然而,我当前的解决方案要求首先创建结构并将其归零,然后才能注册其类型:

package solution

import (
    "errors"
    "fmt"
    "os"
    "reflect"
)

type Solution interface {
    Load()
    Solve() string
}

type SolutionRegister map[string]reflect.Type

func (sr SolutionRegister) Set(t reflect.Type) {
    fmt.Printf("Registering %s\n", t.Name())
    sr[t.Name()] = t
}

func (sr SolutionRegister) Get(name string) (Solution, error) {
    if typ, ok := sr[name]; ok {
        sol := reflect.New(typ).Interface().(Solution)
        return sol, nil
    }
    return nil, errors.New("Invalid solution: " + name)
}

var solutionsRegistry = make(SolutionRegister)

func Register(sol Solution) {
    solutionsRegistry.Set(reflect.TypeOf(sol).Elem())
}

func Load(s string) Solution { …
Run Code Online (Sandbox Code Playgroud)

reflection optimization go

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