小编djp*_*tti的帖子

选择整数类型大小有哪些好的指导原则?

我一直在寻找,我还没有真正想出答案.

当我在内存有限的嵌入式设备上编程时,我通常习惯使用最小的积分/浮点类型来完成这项工作,例如,如果我知道计数器总是在0到255之间,我会宣布它为uint8_t.

但是,在内存受限较少的环境中,int根据Google C++ Styleguide,我习惯于只使用一切.当我查看现有代码时,通常会以这种方式完成.

要明确的是,我得到了这样做的理由,(Google非常好地解释了这一点),但我并不清楚第一种方式背后的理由.

在我看来,即使在不关心内存使用的系统上,减少程序的内存占用也会对整体速度有利,因为从逻辑上讲,较少的整体数据意味着它可以更多地适应CPU缓存.

然而,使问题复杂化的是编译器将自动填充数据并将其与边界对齐,以便可以在单个总线周期中获取数据.我想,那么,它归结为编译器是否足够聪明,比如两个32位整数,并将它们组合在一个64位块中,而不是单独填充每一个到64位.

我想CPU本身是否可以利用它还取决于其确切的内部结构,但优化内存大小提高性能的想法,特别是在较新的处理器上,可以证明Linux内核在gcc的选项上依赖了一段时间-0s为了整体性能提升.

所以我想我的问题是为什么Google方法在实际代码中似乎更为普遍.这里有隐藏的成本,我错过了吗?

c c++ linux memory performance

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

如何为使用 vector<string> 的函数编写 SWIG 接口文件?

我有一个 C++ 文件,我想使用 SWIG 将其转换为 Python 模块。该文件由一个函数组成vector<string> load(string input) {。当然,我使用的是 c++ 标头<vector><string>. 理想情况下,我希望这个函数在从 Python 调用时返回一个 Python 列表。不幸的是,我对 SWIG 的经验相对较少,我想知道最简单的方法是什么。我读到了有关在接口文件中使用 %include "std_string.i" 和 %include "std_vector.i" 的信息,但到目前为止,我只弄清楚如何使用 std_vector 来处理vector<int>orvector<double>等​​,而不是vector<string>。但一定有办法做到这一点。我只是想知道是否有人可以向我解释如何做。我在 Mac OsX 10.7.4 上使用 SWIG 2.0.7 和 Python 2.7.1。

c++ python swig

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

Python在迭代后删除列表中一半的元素

我对这一件事感到非常难过:

我有以下python代码:

def remove(self, widgets):
    for widget in widgets:
        widget_found = False
        for widget_sig in self.widgets:
            if widget_sig.id == widget:
                #remove all objects from selected widget
                widget_found = True
                to_remove = widget_sig.objs
                for obj in to_remove:
                    #objs are all intances of oo_canvas classes
                    obj.destroy()
                    self._build(widget, obj)
        if not widget_found:
            #if we iterated through the entire list and still couldn't find anything
            raise mockingbird_errs.InternalMockingbirdError("The requested widget was not registered with this builder: "+str(widget))
Run Code Online (Sandbox Code Playgroud)

这应该是非常直接的.问题是,它永远不会正确地遍历to_remove.出于某种原因,它会跳过其他所有元素.更令人费解的是,如果我在for循环之前和之后打印to_remove的长度,它会打印254和127.嗯?据我所知,迭代列表不涉及删除所有其他元素.

我错过了一些直截了当的东西吗?到底是怎么回事?

python list python-2.7

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

标签 统计

c++ ×2

python ×2

c ×1

linux ×1

list ×1

memory ×1

performance ×1

python-2.7 ×1

swig ×1