- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个类,它包含指向一大块已分配内存和许多原始类型成员的指针。我正在研究 move 构造函数,认为这是使用它的绝好机会。显然,指针应该移过去,但如果对原语来说是个好主意,我不知道。
下面是该类的人为示例:
class Foo {
private:
long m_bar = 1;
/* 20+ similar members */
};
要使它们可 move ,必须动态分配它们。
class Foo {
public:
Foo(Foo && rhs) : m_bar(rhs.m_bar) { rhs.m_bar = nullptr; }
~Foo() { delete m_bar; }
private:
long *m_bar = new long{1};
};
我的问题是,在堆上分配的开销是否会抵消 move 语义带来的性能提升?
最佳答案
如果有的话,我相信像这样分配每个成员的堆最终会变慢。在初始堆分配之上,仅在构造时执行,在堆上保存指向许多小的、不连续的数据成员的指针不能很好地与 CPU 缓存策略配合使用。
有些类 move 得非常好,因为它们有大量的堆分配内存(例如 std::string)。在您的情况下, move 每个指针将与 move 较小的数据类型一样昂贵。我能看到这更快的唯一方法是,如果您将较小的数据成员包装在堆分配的类/结构中(可能持有一个 unique_pointer 到它。)并通过单个指针的 move move 所有它们。
也就是说,这很可能是过早优化的情况。您可能希望让代码按原样运行,并确定为您的类实现更复杂的 move 语义确实可以真正提高代码的性能。
关于c++ - move 构造函数矫枉过正,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13456476/
我有一个对象需要序列化为 EDI 格式。对于这个例子,我们假设它是一辆汽车。汽车可能不是 b/c 选项随时间变化的最佳示例,但对于真实对象,枚举永远不会改变。 我有很多像下面这样的应用了自定义属性的枚
我正在从 Beginning Javascript 学习 Javascript(很有趣!),书中的一个特定示例似乎有点矫枉过正。我知道他们有时会做一些严格来说不是最佳实践的事情 - 例如使用 docu
我应该使用 NSNumber 还是字符串来保存一个简单的“playerID 号码”,现在它是一个整数,因为我想用 Core Data 保存它? 在我的数据模型中,我将 playerID 设置为整数 1
我目前正在做一些网络相关的事情, public void postData() { HttpClient httpclient = new DefaultHttpClient(); HttpPost
我们正在建立一个我们可以使用的 Laravel 4 基础项目。我想创建一个默认路由规则,让开发人员可以轻松地创建新页面,而不必担心向 Controller 添加路由,但可以为任何更复杂的路由/ Con
已在所有 SO 帖子中努力搜索,但仍找不到答案。我的动画很长,很抱歉发了这么长的帖子! 它在 Chrome 上运行良好,但在 Firefox 30.0 上运行不正常,我不明白为什么。 我真的需要这么多
您好,我目前正在为我的项目使用 channel API。我的客户端是一个标牌播放器,它仅在用户更改媒体内容时才从 App Engine 服务器接收数据。 Appengine 每天只向客户端发送一次或两
我开始将 WebApi 和 OData 集成到测试平台应用程序中。让我们保持简单并坚持使用一个域实体 Customer。显然我会有一个 MVC Controller 。搜索得到它自己的 View 模型
两个问题合而为一... 对于实时视频处理应用程序,我有许多函数每帧调用多次。听取有关 const 和按引用传递的建议,这些函数的签名有点像这样 void processSomething(const
我是一名优秀的程序员,十分优秀!