小编zne*_*eak的帖子

i386汇编问题:为什么我需要插入堆栈指针?

我决定在暑假期间学习x86组装会很有趣.所以我从一个非常简单的hello world程序开始,借用免费的例子gcc -S可以给我.我最终得到了这个:

HELLO:
    .ascii "Hello, world!\12\0"
    .text

.globl _main
_main:
    pushl   %ebp        # 1. puts the base stack address on the stack
    movl    %esp, %ebp  # 2. puts the base stack address in the stack address register
    subl    $20, %esp   # 3. ???
    pushl   $HELLO      # 4. push HELLO's address on the stack
    call    _puts       # 5. call puts
    xorl    %eax, %eax  # 6. zero %eax, probably not necessary since we didn't do anything with …
Run Code Online (Sandbox Code Playgroud)

x86 assembly gnu-assembler

6
推荐指数
1
解决办法
449
查看次数

为什么摆脱挥发性是危险的?

在C++中,volatile处理方式相同const:将指向volatile数据的指针传递给不希望volatile修饰符触发编译错误的函数.

int foo(int* bar) { /* snip */ }

int main()
{
    volatile int* baz;
    foo(baz); // error: invalid conversion from ‘volatile int*’ to ‘int*’
}
Run Code Online (Sandbox Code Playgroud)

为什么危险?对于const修饰符来说,删除它可能会破坏const正确性; 但是有" volatile正确性"之类的东西吗?我无法弄清楚如何将指向易失性数据的指针作为非易失性数据的指针传递可能会导致问题.

编辑只是让你们知道我为什么volatile在第一时间使用:许多Mac OS X的OSAtomic函数系列(用于原子增量,减量,加法,减法,比较和交换等)都需要volatile参数.

c++ volatile

6
推荐指数
2
解决办法
546
查看次数

有没有办法在Mac OS下将数据发送到另一个进程的标准输入?

我想知道是否有一个API,无论它多么模糊,这将允许有人stdin在Mac OS X下将数据发送到另一个进程的流.在Linux下,如果我没记错,你可以使用文件系统/proc来访问这些流(当然,具有正确的权限).

我不知道.Mach端口,有人吗?

macos stdin

6
推荐指数
3
解决办法
3077
查看次数

我可以使用什么数据结构来存储和检索离散值的范围?

我有一个JavaScript程序,我将在其中管理很多整数范围.在这种情况下,范围只是一个开始和结束值(或任何等价的,如开始和长度值),并引用另一个对象.范围可以重叠,并且可以相同(尽管引用的对象将是不同的).

可能的起始值和结束值介于0和4294967295之间(2 32 - 1或0xFFFFFFFF),尽管域中有几个大的"漏洞",即使是部分也不会覆盖范围.与可能性领域相比,大多数范围将非常小:我预计绝大多数范围的长度将小于2000.

我对此结构最重要的用例是查找包含给定整数值的所有范围.大多数情况下,我希望查找失败(没有包含给定值的范围).

否则,我显然还需要向它添加元素(通常)并从中删除元素(很少).偶尔也会,我需要找到与给定范围重叠的所有范围,而不是包含单个值的所有范围.

我可以使用什么样的数据结构?范围列表中的线性搜索是不切实际的,因为查找在大多数情况下都会失败; 而且我需要经常进行查找.

javascript data-structures

6
推荐指数
1
解决办法
360
查看次数

是不是调用`list <T> :: end()`效率低下?

在C++编程书中,我看到了以下std::list迭代器:

for (iterator = list.start(); iterator != list.end(); iterator++)
Run Code Online (Sandbox Code Playgroud)

一直打电话效率不高list.end()吗?将结尾保存到另一个变量或者C++编译器(即g ++)会自动处理这个变量会更好吗?

c++ iterator

6
推荐指数
2
解决办法
554
查看次数

如何从-Wha​​tIf处理中排除块?

我正在编写一个Powershell cmdlet,它需要执行命令并将其stderr输出存储到临时文件中以供以后处理.此输出列出了cmdlet稍后可能使用的COM端口.

# mostly side-effect-free information gathering
$info = [IO.Path]::GetTempFileName()
info-gather.exe 2>$info
Get-Content $info | ForEach-Object {
    # processing
}
Remove-Item $info

# serious things with serious side effects start here
Run Code Online (Sandbox Code Playgroud)

我希望这个cmdlet能够实现,-WhatIf因为它会产生非平凡的副作用.但是,该-WhatIf行为将接管info-gather.exe命令,并且它永远不会被执行.相反,它打印:

如果:在目标"temp\path\to\tmp78A4.tmp"上执行"输出到文件"操作

因为永远不会执行此命令,所以内部处理也不会发生,并且我的cmdlet的其余部分都没有执行,因为它不知道要使用哪些端口,这-WhatIf在很大程度上是无用的.

如何绕过-WhatIf此块而不覆盖cmdlet的其余部分?

powershell

6
推荐指数
1
解决办法
353
查看次数

在union的成员初始化列表中初始化多个重叠字段是否合法?

我有这个联盟:

union Foo
{
    uint32_t u32;
    struct
    {
        uint32_t a : 10;
        uint32_t b : 10;
        uint32_t c : 10;
        uint32_t d : 2;
    };

    Foo() : a(0), b(1), c(2), d(3)
    {
    }
};
Run Code Online (Sandbox Code Playgroud)

我们有一个工具可以分析C++代码中的潜在错误,并且u32在我写这个时它认为尚未初始化时会出现误报.

我发现VC++会让我写这个成员初始化列表:

Foo() : u32(0), a(0), b(1), c(2), d(3)
Run Code Online (Sandbox Code Playgroud)

它确实关闭了工具,但看起来......非常可疑.(根据评论进行编辑:GCC和Clang不会接受它,因此看起来很可疑.)

对于结构,成员初始值设定项按结构中的定义顺序执行.对于工会是否有类似的东西,以确保这不会因为u32(0)

我们没有很好的可移植性.目前,该项目面向Windows,但未来可能会面向iOS和Android.我几乎可以保证它不会出现在奇怪和异国情调的平台上.

当然,我可以只设置a,b,cd在构造函数的身体,它回避了整个问题(或者我可以禁用警告),但它让我好奇.

c++ language-lawyer

6
推荐指数
1
解决办法
410
查看次数

如何模拟属性以引发异常?

我在 Python 2.7 中使用 MagicMock 来模拟对象。我嘲笑的类之一具有属性,其中之一TypeError在某些情况下可以引发 a 。

我想嘲笑这种行为,但我不知道如何:

  • del my_mock.my_property将导致访问AttributeErrorif my_property,但我需要一个TypeError.
  • my_mock.my_property = MagicMock(side_effect=TypeError)导致一个TypeErrorwhenmy_property调用,但不是当它仅仅被访问时。

我该怎么做?

python unit-testing mocking python-2.7 magicmock

6
推荐指数
1
解决办法
2455
查看次数

枚举PHP DOMDocument对象的已注册名称空间

对于我的一个项目,我正在使用DOMDocument该类来加载和操作XML文档.

我需要检索文档中使用的每个命名空间; 但是,我找不到我是怎么做到的.本DOMDocument类有方法来获取一个URI或命名空间前缀的URI的名称空间前缀,但我什么也没看见实际枚举注册的命名空间.

SimpleXML图书馆拥有getNamespaces()该方法.是否有相应的DOMDocument

php simplexml domdocument

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

Python:等待按键或直到超时

我在终端会话中有一个长时间运行的Python脚本(主机是一个FreeBSD盒子),它每9分钟执行一次任务.现在,我希望能够随时中断该睡眠呼叫,以便它立即执行任务.

我怎样才能做到这一点?捕捉Ctrl+ C不是一个选项,因为我需要它来停止程序(而不是仅仅打断睡眠).我可以用终端窗口和键盘做的任何其他事情都可以.

python

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