小编Wir*_*uce的帖子

启用-msse,-msse2和-mfpmath = sse会不会让我的程序运行得更快?

我有一个C++程序正在进行大量的数学运算(主要调用sin(),sqrt()和常规操作).我知道在理论上启用-msse,-msse2和-mfpmath = sse应该为GCC/G ++公开更多的寄存器以便使用它可能使我的程序运行得更快,实际上它总会这样做吗?在最坏的情况下,它可以让我的代码运行得更慢吗?

c++ gcc g++

16
推荐指数
2
解决办法
6526
查看次数

SQLAlchemy查询具有关系计数的对象

可以说我有SQL Alchemy ORM类:

class Session(db.Model):
  id = db.Column(db.Integer, primary_key=True)
  user_agent = db.Column(db.Text, nullable=False)

class Run(db.Model):
  id = db.Column(db.Integer, primary_key=True)

  session_id = db.Column(db.Integer, db.ForeignKey('session.id'))
  session = db.relationship('Session', backref=db.backref('runs', lazy='dynamic'))
Run Code Online (Sandbox Code Playgroud)

我想查询基本上以下内容:

((session.id, session.user_agent, session.runs.count())
  for session in Session.query.order_by(Session.id.desc()))
Run Code Online (Sandbox Code Playgroud)

但是,这显然是1 + n查询,这很糟糕.使用1个查询执行此操作的正确方法是什么?在普通的SQL中,我会使用以下内容执行此操作:

SELECT session.id, session.user_agent, COUNT(row.id) FROM session
LEFT JOIN rows on session.id = rows.session_id
GROUP BY session.id ORDER BY session.id DESC
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask-sqlalchemy

12
推荐指数
2
解决办法
4105
查看次数

overflow-x:可见; overflow-y:auto; 不起作用 - 这个标准是否合规?

我在开发网页时遇到了问题.

Firefox或Internet Explorer都不会显示我对以下代码段的预期行为:

<div
    style="overflow-x: visible; overflow-y: auto; width: 200px; height: 200px; border: 1px solid #F00;">
    <div style="width: 300px; height: 300px; background-color: #0F0;">&nbsp;</div>
</div>
Run Code Online (Sandbox Code Playgroud)

我期望的是能够看到容器div的x侧溢出的内容,而不是底部溢出的内容(使用滚动条查看更多内容).相反,我看到的是一个x滚动条和一个滚动条.

注意:在firebug中检查计算出的样式属性会显示firefox正在overflow-x: auto;用于容器.

这种行为有望吗?我理解在请求将滚动条置于我自己的内容之上时存在一些含糊之处(例如,我的水平内容将超过垂直滚动条,因此必须覆盖一些内容).

我遇到符合标准的行为也是如此吗?

css firefox internet-explorer-9

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

从C程序执行Perl脚本

我目前有一个用C语言编写的程序,我有兴趣将一个相当冗长的perl脚本集成到其中,其他人编写的脚本完成了类似的功能,但是以不同的方式完成.我不想将整个perl脚本手工翻译成C语言.

我看到它的方式有几个不同的选择:

  1. 因为脚本使用stdin和std进行通信,所以我知道我可以使用系统调用,例如system("perl script.pl")管道输入和输出,但我觉得这个解决方案不可移植,感觉不太优雅.
  2. 我可以将perl解释器嵌入到我的程序中以处理脚本,但是我觉得这可能是笨重的,并且对于执行不会改变的脚本会有点过分.这确实提供了这样的优势:我可以直接调用perl子例程,而不是管道输入和输出.
  3. 我可以使用某种perl-to-c转换工具(如perlcc)在编译时将perl源编译成c源,然后将其包含在我的程序的其余部分中.虽然初看起来我认为这将是最好的选择,似乎在perl社区(或至少谷歌向我展示的部分)中做出了广泛的共识,这种翻译并不是一个好主意(这个可能只是为了速度考虑,这对我来说根本不是问题).这也(可能?)允许我从C代码中调用perl子程序,这将是一个巨大的优势.
  4. 手动重写脚本.

所以我的问题是:这些选项中的哪一个(或者上面没有一个)是最优雅和最便携的?我知道从一个C程序中调用这个perl程序已经是一个混乱的黑客入手,但最不凌乱的解决方案可能是最好的.

谢谢!

c perl

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

如果我按函数从函数返回一个STL容器,GCC会单独复制所有元素吗?

如果我有以下函数声明返回一个std::list<Triangle*>by值:

std::list<Triangle*> getAllAbove(Triangle* t);
Run Code Online (Sandbox Code Playgroud)

当我std::list<Triangle*>在getAllAbove结束时返回(在getAllAbove中的堆栈上创建)时,GCC是否能够优化对std::list<Triangle*>复制构造函数的调用(可能会迭代所有元素并复制它们),或者至少只复制列表元数据(例如不是元素本身)?该列表可能包含几千个指针,我想避免不必要地复制所有这些指针.

绕过复制构造函数调用以在堆上创建列表然后返回指向它的指针的唯一方法是什么?

c++ gcc stl g++

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

为什么GCC不允许我将模板参数用于另一个模板的参数?

我编写了以下模板函数来汇总std :: vector对象的内容.它本身就是一个名为sum.cpp的文件.

#include <vector>

template<typename T>
T sum(const std::vector<T>* objs) {
    T total;
    std::vector<T>::size_type i;
    for(i = 0; i < objs->size(); i++) {
        total += (*objs)[i];
    }
    return total;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译此函数时,G ++会发出以下错误:

sum.cpp: In function ‘T sum(const std::vector<T, std::allocator<_Tp1> >*)’:
sum.cpp:6: error: expected ‘;’ before ‘i’
sum.cpp:7: error: ‘i’ was not declared in this scope
Run Code Online (Sandbox Code Playgroud)

据我所知,返回此错误的原因是因为std::vector<T>::size_type无法解析为某种类型.这是我唯一的选择std::size_t(如果我理解正确但通常但并非总是相同std::vector<T>::size_type),或者是否有解决方法?

c++ templates stl g++ function-templates

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