我可以使用以下命令转储gdb中的所有整数寄存器:
info registers
Run Code Online (Sandbox Code Playgroud)
对于xmm寄存器(英特尔)我需要一个文件,如:
print $xmm0
print $xmm1
...
print $xmm15
Run Code Online (Sandbox Code Playgroud)
然后获取该文件.有没有更简单的方法?
尝试以下指数积分:
Integrate[ Exp[-2 A Sqrt[x^2 + a^2] + I ( x Subscript[k, x] + b )],
{x, 0, Infinity}
]
Run Code Online (Sandbox Code Playgroud)
我找回了一些非常印刷但没有评估过的东西?这是否意味着Mathematica无法执行积分并放弃?我没有看到任何消息说这是发生了什么.
为了提供这个问题的上下文,这是一个我用纸和笔完成的积分的一维版本:
\int d^3 r e^{ i \vec{k} \cdot \vec{r} } e^{ - 2 Z r/ a_0 }
Run Code Online (Sandbox Code Playgroud)
尝试mathematica的目的是看我是否可以验证我的结果:
16 \pi Z a_0^3/(4 Z^2 + k^2 a_0^2)^2
Run Code Online (Sandbox Code Playgroud) 我想修改一个数组分配:
float * a = new float[n] ;
Run Code Online (Sandbox Code Playgroud)
使用对齐的分配器。我倾向于尝试使用placement new 和posix_memalign(或新的c++11 等价物),但看到placement new with arrays 在数组分配方面存在问题,因为编译器可能需要为计数或其他元数据提供额外的存储空间。
我试过:
int main()
{
float * a = new alignas(16) float[3] ;
a[2] = 0.0 ;
return a[2] ;
}
Run Code Online (Sandbox Code Playgroud)
但编译器似乎表明 alignas 被忽略:
$ g++ -std=c++11 t.cc -Werror
t.cc: In function ‘int main()’:
t.cc:4:39: error: attribute ignored [-Werror=attributes]
float * a = new alignas(16) float[3] ;
^
t.cc:4:39: note: an attribute that appertains to a type-specifier is ignored
Run Code Online (Sandbox Code Playgroud)
看起来使用 alignas …
Unix有各种睡眠API(睡眠,睡眠,纳米睡眠).我知道睡眠的唯一Win32功能是Sleep(),它以毫秒为单位.
我看到大多数睡眠,即使在Unix上,也会大幅度上升(即:通常为大约10ms).我在Solaris上看到过,如果你以root身份运行,你可以获得10毫秒以下的休眠时间,我知道如果启用了精细粒度计时器内核参数,这也可以在HPUX上运行.Windows上是否有更精细的粒度计时器?如果是,那么什么是API?
如果我在(linux amd64).o文件上运行objdump -d,函数调用将显示,而不会完成链接时间分辨率.例:
90: 66 89 44 24 1c mov %ax,0x1c(%rsp)
95: 44 89 74 24 10 mov %r14d,0x10(%rsp)
9a: e8 00 00 00 00 callq 9f <foo+0x9f>
9f: 83 f8 ff cmp $0xffffffffffffffff,%eax
a2: 74 5e je 102 <foo+0x102>
Run Code Online (Sandbox Code Playgroud)
函数中的一个分支正确显示,但callq只是为链接器输入的存根(有四个字节的零可供链接器放入正确的地址).
有没有一种方法,没有实际链接,以获得已解决函数名称的汇编列表?我不关心最终将使用的地址,只关心函数的名称.该信息必须位于.o文件中,因为链接器必须使用它来完成其工作.
我问,因为有问题的代码进入的共享库大约是140Mb,并且需要很长时间才能运行objdump -d来获取asm转储,并将所有函数调用解析为实际名称.
假设我创建了一些Windows符号链接,如:
rd /s /q source withlink linkdir
mkdir source
mkdir withlink
echo blah > source/myfile
cd withlink
touch blah
mklink mylink ..\source\myfile
@REM mklink /d linkdir ..\source
cd ..
Run Code Online (Sandbox Code Playgroud)
我可以用shell删除包含符号链接的目录
rd /s /q withlink
Run Code Online (Sandbox Code Playgroud)
我在perl脚本中执行相同的任务,我们目前使用cygwin'rm -rf'.不幸的是我们正在使用cygwin 1.5并且rm和rm -rf在我想使用的符号链接上不能在该版本中正常工作(它们删除了符号链接内容而不是符号链接).
如果我尝试:
use File::Path qw( rmtree ) ;
rmtree( ['withlink'] ) ;
Run Code Online (Sandbox Code Playgroud)
这很好用,只要我没有任何目录符号链接(就像上面的create-the-links序列中的REM一样),然后perl的rmtree最终表现得像cygwin,我最终得到了目录内容我的原始目录已删除.
有没有人建议我可以使用备用perl递归目录删除方法.我想到了一个shell标注:
system("rd /s /q withlink") ;
Run Code Online (Sandbox Code Playgroud)
但这需要我测试平台并为Windows和Unix提供不同的perl代码.
编辑:请注意,与Unix不同,unlink()不能删除目录符号链接,至少使用perl v5.6.0,这是我们的构建系统当前使用的.但是,rmdir()确实可以删除Windows目录符号链接.
Gcc内联asm早期clobber约束在这里的gcc文档中描述:
http://gcc.gnu.org/onlinedocs/gcc/Modifiers.html#Modifiers
我们有128位add的amd64实现:
#define ADD128(rh, rl, ah, al, bh, bl) \
__asm__("addq %2, %0; adcq %3, %1" \
/* outputs */ : "=r"(rl), /* %0 */ \
"=r"(rh) /* %1 */ \
/* inputs */ : "emr"(bl), /* %2 */ \
"emr"(bh), /* %3 */ \
"0"(al), /* %4 == %0 */ \
"1"(ah) /* %5 == %1 */ \
/* clobbers */: "cc" /* condition registers (CF, ...) */ \
)
Run Code Online (Sandbox Code Playgroud)
我想知道这是否必须使用%0的早期clobber(&):
#define ADD128(rh, rl, ah, al, bh, bl) …Run Code Online (Sandbox Code Playgroud) 我知道memset对class初始化不满意.例如,类似以下内容:
class X { public:
X() { memset( this, 0, sizeof(*this) ) ; }
...
} ;
Run Code Online (Sandbox Code Playgroud)
vtbl如果virtual混合中有一个功能,它会破坏它.
我正在开发一个(巨大的)遗留代码库,它是C-ish但是用C++编译,因此所有成员都是POD,不需要传统的C++构造函数.C++的使用逐渐深入(比如虚函数),这就咬了开发人员没有意识到memset有这些额外的C++牙齿.
我想知道是否有一个C++安全的方法来进行初始的全部零初始化,然后可能会跟着特定的成员初始化,其中零初始化是不合适的?
我在C++中找到了用于初始化的类似问题memset,并使用memset将派生结构归零.这两个都有"不使用memset()"答案,但没有好的替代方案(特别是对于可能包含许多成员的大型结构).
我stty, not a typewritter在hpux上看到消息(尽管有交互式终端检查?),我猜这些是由于我的.kshrc文件中的stty行:
case $- in
*i* )
stty hupcl ixon ixoff
stty erase '^?' kill '^U' intr '^C' eof '^D' susp '^Z'
;;
esac
Run Code Online (Sandbox Code Playgroud)
两个问题:
1)我知道擦除线为什么存在,因为没有它就没有退格.我继承了这些.kshrc行,但不知道他们做了什么.
有人知道hupcl ixon ixoff线的意义吗?stty手册页不是特别有启发性:
hupcl (-hupcl) Hang up (do not hang up) modem connection on
last close.
ixon (-ixon) Enable (disable) START/STOP output control.
Output is stopped by sending an ASCII DC3 and
started by sending an ASCII DC1.
ixoff (-ixoff) Request that the system send (not send)
START/STOP characters when …Run Code Online (Sandbox Code Playgroud) 最近我clang_complete用来做C++代码完成.这对于小程序来说是好的和快速的,但对于我的情况来说太慢了(我正在处理大型代码库,通常一个文件需要几秒钟来编译),即使我使用了libclang,它可以缓存一些已解析的结果以加速以后的解析,如果我理解正确的话.
目前clang_complete将阻止ClangComplete直到libclang完成解析.即使它启动了一个工作线程,主线程仍然会反复检查用户是否按下CTRLC或工作线程是否成功完成.在此期间,vim变得反应迟钝,从而使这个插件难以使用.
我想对这种行为做一些改进,例如,ClangComplete不会阻塞,但如果花费的时间超过0.2秒,则返回空结果,而线程仍然在运行.当libclang完成其解析,并且它检测到我仍然在输入相同的文字完成,它会弹出一个菜单完成.
这方面的困难是:
std::strang而不是std::string,我键入退格键以删除错误ang,完成菜单将再次显示.那么如何访问这个内部标志?