小编spr*_*aff的帖子

哪个更快,将原始数据写入驱动器或写入文件?

我需要将数据写入驱动器.我有两个选择:

  1. 写原始扇区.(_ write(handle,pBuffer,size);)
  2. 写入文件(fwrite(pBuffer,size,count,pFile);)

哪种方式更快?

我期望原始扇区写入函数_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)

c c++ windows

9
推荐指数
2
解决办法
1525
查看次数

获取生成UNIX信号的故障地址

我对一个信号处理程序感兴趣,它可以识别导致问题的指令的地址.

我知道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)

c++ unix signals

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

为什么空的Perl哈希有一个键?

标准的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)

这个额外价值来自哪里?

size perl hash key

8
推荐指数
4
解决办法
3767
查看次数

安置新的休息时间和参考?

在讨论了这个问题的回答之后,显然:

以下代码允许

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)

c++ const reference placement-new c++11

8
推荐指数
2
解决办法
780
查看次数

html体小于其内容

以下是该问题的基本说明:

<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一直向下,就滚动允许而言,所以你永远不会看到它们下面的任何空隙.

html css

8
推荐指数
4
解决办法
2万
查看次数

这个std :: map的可移动类型有什么问题?

我想把一个可移动但不可复制的类型作为值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)

c++ c++11

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

在预测分母时,数值不稳定的风险是什么?

假设我想将一个数字分成许多.

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)也许没有方便的公式,但我们至少可以说出数值不稳定性成为问题时的经验法则吗?它与操作数的大小有关,也可能与操作数的大小有什么关系?

c numeric ieee-754

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

当边距和填充为零时,为什么这些p元素之间的空格?

这是一个小提琴.简化的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标签.

html css

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

将std :: istream &&作为参数是否合理?

我遇到过这样做的代码:

SomeObject parse (std::istream && input) {....
Run Code Online (Sandbox Code Playgroud)

所述input参数是一个rvalue参考,这通常意味着该函数取意参数的所有权.这不是这里发生的事情.

parse函数将完全消耗输入流,并且它需要rvalue引用,因为然后调用代码将放弃对该属性的所有权,istream因此这是输入流将不可用的信号.

我认为这是可以的,因为由于parse函数实际上没有移动对象,所以没有切掉子类型的危险.从parse观点来看,这基本上表现为普通参考,只有对调用函数有一种可编译的注释,你必须放弃对流的所有权.

这段代码真的安全吗?或者是否有一些被忽视的微妙之处使这变得危险?

c++ iostream istream rvalue-reference

8
推荐指数
2
解决办法
474
查看次数

多重继承导致虚假的模糊虚拟函数重载

在此示例中,类FooBar从库中提供。我的课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给它消除歧义,但是这样做会破坏多态性并导致链接器错误。

我可以funcdo_stuff …

c++ virtual-functions multiple-inheritance overload-resolution name-lookup

8
推荐指数
2
解决办法
128
查看次数