我需要将数据写入驱动器.我有两个选择:
哪种方式更快?
我期望原始扇区写入函数_write更有效.但是,我的测试结果失败了!fwrite更快._write成本较长.
我贴了我的片段; 也许我的代码是错的.你能帮我吗?无论哪种方式都可以,但我认为原始写入更好,因为看起来驱动器中的数据至少是加密的....
#define SSD_SECTOR_SIZE 512
int g_pSddDevHandle = _open("\\\\.\\G:",_O_RDWR | _O_BINARY, _S_IREAD | _S_IWRITE);
TIMER_START();
while (ulMovePointer < 1024 * 1024 * 1024)
{
_write(g_pSddDevHandle,szMemZero,SSD_SECTOR_SIZE);
ulMovePointer += SSD_SECTOR_SIZE;
}
TIMER_END();
TIMER_PRINT();
FILE * file = fopen("f:\\test.tmp","a+");
TIMER_START();
while (ulMovePointer < 1024 * 1024 * 1024)
{
fwrite(szMemZero,SSD_SECTOR_SIZE,1,file);
ulMovePointer += SSD_SECTOR_SIZE;
}
TIMER_END();
TIMER_PRINT();
Run Code Online (Sandbox Code Playgroud) 我对一个信号处理程序感兴趣,它可以识别导致问题的指令的地址.
我知道siginfo_t并且__builtin_return_address似乎都没有工作:
#include <iostream>
#include <signal.h>
void handler (int, siginfo_t *, void *);
int main ()
{
begin:
std :: cerr << &&begin << " ~ " << &&before << " ~ " << &&after << "\n";
struct sigaction s;
s .sa_flags = SA_SIGINFO;
sigemptyset (& s .sa_mask);
s .sa_sigaction = handler;
sigaction (SIGSEGV, &s, NULL);
int * i = NULL;
before:
*i = 0;
after:
std :: cout << "End.\n";
}
void handler (int, siginfo_t …Run Code Online (Sandbox Code Playgroud) 标准的googleable回答"如何找出Perl中哈希的大小?" 是"拿大小keys(%hash)":
my %h = {};
print scalar (keys (%h));
Run Code Online (Sandbox Code Playgroud)
这打印'1'.我期待零.另一方面.同样的,
my %h = {};
$h{"a"} = "b";
$h{"x"} = "y";
print scalar keys (%h);
print "\nKey: $_" for (keys %h);
Run Code Online (Sandbox Code Playgroud)
打印:
3
关键:a
关键:x
密钥:HASH(0x229e8)
这个额外价值来自哪里?
以下代码是允许
struct Foo {
int x;
};
Foo f;
Foo & f_ref = f;
(&f) -> ~Foo ();
new (&f) Foo ();
int x = f_ref .x;
Run Code Online (Sandbox Code Playgroud)
但下面的代码是不容许
struct Foo {
const int & x; // difference is const reference
Foo (int & i) : x(i) {}
};
int i;
Foo f (i);
Foo & f_ref = f;
(&f) -> ~Foo ();
new (&f) Foo (i);
int x = f_ref .x; …Run Code Online (Sandbox Code Playgroud) 以下是该问题的基本说明:
<html><head><style type="text/css">
html {width: 100%; height: 100%; background: red;}
body {width: 100%; height: 100%; background: green;}
.leftbar, .rightbar {height: 100%; background: blue;}
.leftbar {float: left;}
.rightbar {float: right;}
table {width: 100px; height: 800px; background: black; color: white;
margin: 0 auto 0 auto;}
</style></head>
<body>
<ul class="leftbar"><li>one</li><li>two</li></ul>
<ul class="rightbar"><li>alpha</li><li>beta</li></ul>
<table><tbody><tr><td>blah blah</td></tr></tbody></table>
</body>
</html>?
Run Code Online (Sandbox Code Playgroud)
我们可以立即看到浮动ul元素与body包含它们的元素一样高,问题是它body不像table它包含的那么高.
如何让它body足够大?在这个例子中,我希望leftbar并且rightbar一直向下,就滚动允许而言,所以你永远不会看到它们下面的任何空隙.
我想把一个可移动但不可复制的类型作为值std::map.这是一些测试原理的简单代码.
#include <map>
struct Foo
{
Foo ();
Foo (const Foo &) = delete;
Foo & operator = (const Foo &) = delete;
Foo (Foo &&) {}
Foo & operator = (Foo &&) {return *this;}
};
int main ()
{
std :: map <int, Foo> m;
m .insert (std :: make_pair (123, Foo ()));
}
Run Code Online (Sandbox Code Playgroud)
我用g++ test.cpp --std=c++0x(Ubuntu 12.04上的gcc版本4.5.1)编译它.有一个很大的丑陋错误,如下所示.问题是什么?
In file included from /usr/local/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../../include/c++/4.5.1/bits/stl_algobase.h:66:0,
from /usr/local/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../../include/c++/4.5.1/bits/stl_tree.h:62,
from /usr/local/lib/gcc/i686-pc-linux-gnu/4.5.1/../../../../include/c++/4.5.1/map:60,
from test.cpp:1: test.cpp: In copy constructor ‘std::pair<const int, …Run Code Online (Sandbox Code Playgroud) 假设我想将一个数字分成许多.
a /= x;
b /= x;
c /= x;
...
Run Code Online (Sandbox Code Playgroud)
由于乘法更快,诱惑就是这样做
tmp = 1.0f / x;
a *= tmp;
b *= tmp;
c *= tmp;
...
Run Code Online (Sandbox Code Playgroud)
1)这保证会产生相同的答案吗?我怀疑不是,但一些确认会很好.
2)如果 x非常大或非常小,我预计这会导致精度的显着降低.有没有一个公式可以告诉我我会牺牲多少精确度?
3)也许没有方便的公式,但我们至少可以说出数值不稳定性成为问题时的经验法则吗?它与操作数的大小有关,也可能与操作数的大小有什么关系?
这是一个小提琴.简化的HTML基本上就是这样
<div id="canvas">
<p><span></span><span></span></p>
<p><span></span><span></span></p>
</div>
Run Code Online (Sandbox Code Playgroud)
有了这个CSS
#canvas p
{
margin: 0;
border: 0;
padding: 0;
}
#canvas p span
{
width: 50px;
height: 50px;
cursor: pointer;
border: thin solid black;
display: inline-block;
}
Run Code Online (Sandbox Code Playgroud)
它呈现如下:
为什么行之间有空格?DOM Inspector告诉我,跨度没有边距和填充以及p标签.
我遇到过这样做的代码:
SomeObject parse (std::istream && input) {....
Run Code Online (Sandbox Code Playgroud)
所述input参数是一个rvalue参考,这通常意味着该函数取意参数的所有权.这不是这里发生的事情.
该parse函数将完全消耗输入流,并且它需要rvalue引用,因为然后调用代码将放弃对该属性的所有权,istream因此这是输入流将不可用的信号.
我认为这是可以的,因为由于parse函数实际上没有移动对象,所以没有切掉子类型的危险.从parse观点来看,这基本上表现为普通参考,只有对调用函数有一种可编译的注释,你必须放弃对流的所有权.
这段代码真的安全吗?或者是否有一些被忽视的微妙之处使这变得危险?
在此示例中,类Foo和Bar从库中提供。我的课Baz从两者继承。
struct Foo
{
void do_stuff (int, int);
};
struct Bar
{
virtual void do_stuff (float) = 0;
};
struct Baz : public Foo, public Bar
{
void func ()
{
do_stuff (1.1f); // ERROR HERE
}
};
struct BazImpl : public Baz
{
void do_stuff (float) override {};
};
int main ()
{
BazImpl () .func ();
}
Run Code Online (Sandbox Code Playgroud)
我收到了编译错误reference to ‘do_stuff’ is ambiguous,这对我来说似乎是虚假的,因为两个函数签名完全不同。如果do_stuff是非虚拟的,我可以打电话Bar::do_stuff给它消除歧义,但是这样做会破坏多态性并导致链接器错误。
我可以func在do_stuff …
c++ virtual-functions multiple-inheritance overload-resolution name-lookup