我从各种来源(虽然大多数来自我的同事)中听到过,-O3用g ++ 的优化级别进行编译在某种程度上是"危险的",并且除非被证明是必要的,否则应该避免.
这是真的,如果是的话,为什么?我应该坚持-O2吗?
假设我在文件中存储了以下Bash脚本foo.sh:
#!/bin/bash
echo foo
Run Code Online (Sandbox Code Playgroud)
无需scp文件,我怎么能执行存储在foo.sh远程机器上的脚本?
我尝试了以下(有一些变化)但没有成功:
$ ssh root@remote eval `cat foo.sh`
Run Code Online (Sandbox Code Playgroud)
eval `cat foo.sh`似乎扩展到eval #!/bin/bash echo foo这里
usleep的文档说明调用usleep(0)没有效果.但是,在我的系统(RHEL 5.2)上运行下面的C++代码小片段时,我发现它实际上看起来效果与之相同usleep(1).这是预期的,如果是这样的话,为什么文档与我在现实生活中看到的内容之间存在差异?
图表A.
码:
#include <unistd.h>
int main()
{
for( int i = 0; i < 10000; i++ )
{
usleep(1);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
$ time ./test
real 0m10.124s
user 0m0.001s
sys 0m0.000s
Run Code Online (Sandbox Code Playgroud)
图表B
码:
#include <unistd.h>
int main()
{
for( int i = 0; i < 10000; i++ )
{
usleep(1);
usleep(0);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
$ time ./test
real 0m20.770s
user 0m0.002s
sys 0m0.001s
Run Code Online (Sandbox Code Playgroud) 我有一个课程,一方面,InputStream从公共方法返回一个感觉是正确的,例如
public class MyClass {
private File _file;
...
public InputStream getInputStream() {
return new FileInputStream( _file );
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我对这样做也非常谨慎,因为它让调用者有责任关闭这个流.我有什么方法可以避免这个问题?
背景:我正在编写一个自动生成HTML表的Java应用程序.除了添加表格行,此应用程序还可以插入隐藏的输入.但是,目前它只是在下次机会时将它们插入表中,例如:
<table>
<tr> ... </tr>
<input type="hidden" />
<tr> ... </tr>
</table>
Run Code Online (Sandbox Code Playgroud)
所以,我的问题:在这样的行之间插入隐藏输入是否有效,或者这可能会导致问题?
我有一种情况需要float一个单一的代表char.这个'minifloat'需要表示的范围是0到10e-7,所以我们总是假设数字是+ ve,而指数-ve是为了节省空间.
我考虑过的表示是3位指数和5位尾数(带有1个隐含位),指数在基数10中,即x = man * 10^exp.
要从float转换为我的minifloat,我打算使用frexp,并使用一些数学从base 2转换为base 10.
这是一种明智的做法吗?或者有更好的方法来实现这一目标吗?
现在,我知道向非叶类添加新的虚函数通常是不好的,因为它破坏了尚未重新编译的任何派生类的二进制兼容性.但是,我的情况略有不同:
我有一个接口类和实现类编译成共享库,例如:
class Interface {
public:
static Interface* giveMeImplPtr();
...
virtual void Foo( uint16_t arg ) = 0;
...
}
class Impl {
public:
...
void Foo( uint16_t arg );
....
}
Run Code Online (Sandbox Code Playgroud)
我的主应用程序使用这个共享库,基本上可以写成:
Interface* foo = Implementation::giveMeImplPtr();
foo->Foo( 0xff );
Run Code Online (Sandbox Code Playgroud)
换句话说,应用程序没有任何派生类Interface,它只是使用它.
现在,说我想重载Foo( uint16_t arg )用Foo( uint32_t arg ),我是安全的这样:
class Interface {
public:
static Interface* giveMeImplPtr();
...
virtual void Foo( uint16_t arg ) = 0;
virtual void Foo( uint32_t arg ) = 0;
...
} …Run Code Online (Sandbox Code Playgroud) 我有一个稍微不寻常的CSS挑战需要克服.
我有一个两列布局,其中左列的宽度由主图像的宽度设置,右边允许填充剩余的空间.主图像下方有一个容器,其自然宽度可能大于主图像.但是,我希望这个div与主图像的宽度相同,并且要隐藏溢出.以下是我尝试这样做的努力:
.outer {
margin-right: 5px;
position: relative;
}
.left {
float: left;
}
.right {
width: auto;
overflow: hidden;
}
.contentOuter {
overflow: hidden;
}
.content {
width: 500px;
}
.inner {
background-color: grey;
color: white;
width: 100%;
height: 150px;
}Run Code Online (Sandbox Code Playgroud)
<div class="outer left">
<div class="image">
<img src="http://placehold.it/350x150" />
</div>
<div class="contentOuter">
<div class="content">
<img src="http://placehold.it/500x50" />
</div>
</div>
</div>
<div class="outer right">
<div class="inner">
Hello world!
</div>
</div>Run Code Online (Sandbox Code Playgroud)
但正如您所看到的.contentOuter,无论我尝试什么,都会延伸到其内容的宽度.
我有一个主要的警告是,除了.content有一个固定的宽度,我不希望我的CSS中有任何其他硬编码宽度; 一切都应该是完全流动的,并且柱子的尺寸由尺寸决定.image img. …
在Eclipse中,我有一个名为ProjectA的项目,它是一个动态Web模块。ProjectB是ProjectA使用的库。我已将ProjectB添加到ProjectA的Web部署程序集中,并带有部署路径/WEB-INF/lib/ProjectB.jar。
当我将ProjectA部署到Tomcat v6.0服务器上时,一切正常。但是,如果我对ProjectB进行了任何更改,无论我做什么,这些更改似乎都不会被部署吸收。
我从主菜单中尝试了以下选项Project-> Clean ...,从服务器的上下文菜单中尝试了Clean Module Work Directory ...,但均无效。唯一可行的方法是删除项目,然后将其重新导入到Eclipse中。
任何想法将不胜感激!
谢谢
说我有以下成员函数:
void CFoo::regWrite( int addr, int data )
{
reg_write( addr, data ); // driver call to e.g. write a firmware register
}
Run Code Online (Sandbox Code Playgroud)
显然,调用此函数不会修改调用它的对象的内部状态.但是,它会更改此Foo实例所代表的任何状态.
在这些情况下,应该Foo::regWrite(int addr, int data)是const函数吗?
说我有两个Collections:
Collection< Integer > foo = new ArrayList< Integer >();
Collection< Integer > bar = new ArrayList< Integer >();
Run Code Online (Sandbox Code Playgroud)
并说有时我想单独迭代它们,但有时一起.有没有一种方法围绕创建一个包装foo,并bar让我可以在联合对迭代,但也随时更新foo和bar改变?(即Collection.addAll()不适合).
例如:
Collection< Integer > wrapper = ... // holds references to both bar and foo
foo.add( 1 );
bar.add( 99 );
for( Integer fooInt : foo ) {
System.out.println( fooInt );
} // output: 1
for( Integer barInt : bar ) {
System.out.println( barInt );
} // output: …Run Code Online (Sandbox Code Playgroud) 我们有一个多线程的嵌入式应用程序,由于这里讨论的硬件限制太平凡,每当它输出到文件时,必须将其文件系统重新安装为RW.
我们目前通过system()调用和运行mount命令来执行此操作.但是,此调用会不时阻塞,并导致应用程序陷入死锁.
在我的调试过程中,我已经system(NULL)在原始system()调用之前放置了,这似乎有时也会阻塞.
一般来说,在什么情况下可能会system()阻止所有永恒?
c++ ×6
java ×3
html ×2
linux ×2
bash ×1
collections ×1
css ×1
eclipse ×1
embedded ×1
g++ ×1
inheritance ×1
inputstream ×1
io ×1
optimization ×1
ssh ×1
usleep ×1
width ×1