我正在编译centos5.9 32位(在64位机器上运行),目标是32位.g ++版本是4.4.7,它不是默认情况下在centos5.9上提供的版本,但它可以与yum一起下载并作为发行版的一部分提供.
我有一个非常简单的循环如下
std::vector<double> result(n);
std::vector<double> values(n);
// here I compute values(). They are correct and I extensively noted
// that there's nothing wrong there. The problem is here
result[0] = 0.0;
for ( int i = 0 ; i < n-1 ; ++i ) {
result[i+1] = result[i]+values[i];
// printf("x");
}
Run Code Online (Sandbox Code Playgroud)
在这个代码的一个更复杂的版本(显示完全相同的问题)中,我使用以下运算符为类的RealVector封装std :: vector作为passthrough
inline double & operator[] (int index) { return data_[index]; }
Run Code Online (Sandbox Code Playgroud)
问题是我在结果中发现了一个微小但相关的数值差异,这取决于运算符[]是否内联.同样,如果我取消注释上面给出的printf()行,我也会更改结果.请注意,在具有相同配置的centos59 64位中不会出现此问题,或者如果它出现,则低于可检测性.
它是一个编译器错误,还是有一些微妙的魔法?我试图检查asm和解析树,但它太复杂了,无法理解.我通常使用C管理,但在C++中,生成的文件中会出现太多黑暗魔法.
在装载机部分引用"连接器和装载机"
"加载时重定位比链接时重定位要简单得多,因为整个程序作为一个单元重新定位.[...]将程序读入内存后,加载程序查询目标文件中的重定位项并修复项目指向的记忆位置"
也许我误解了这一点,这只是在一些架构中,但我的问题是:在ELF格式中指定哪些项目需要在加载时重定位?我怎么查询这个清单?
我在llvm clang Apple LLVM 8.0.0版(clang-800.0.42.1)上反汇编代码:
int main() {
float a=0.151234;
float b=0.2;
float c=a+b;
printf("%f", c);
}
Run Code Online (Sandbox Code Playgroud)
我编译时没有-O规范,但我也试过-O0(给出相同)和-O2(实际上计算值并存储它预先计算)
产生的反汇编如下(我删除了不相关的部分)
-> 0x100000f30 <+0>: pushq %rbp
0x100000f31 <+1>: movq %rsp, %rbp
0x100000f34 <+4>: subq $0x10, %rsp
0x100000f38 <+8>: leaq 0x6d(%rip), %rdi
0x100000f3f <+15>: movss 0x5d(%rip), %xmm0
0x100000f47 <+23>: movss 0x59(%rip), %xmm1
0x100000f4f <+31>: movss %xmm1, -0x4(%rbp)
0x100000f54 <+36>: movss %xmm0, -0x8(%rbp)
0x100000f59 <+41>: movss -0x4(%rbp), %xmm0
0x100000f5e <+46>: addss -0x8(%rbp), %xmm0
0x100000f63 <+51>: movss %xmm0, -0xc(%rbp)
...
Run Code Online (Sandbox Code Playgroud)
显然它正在做以下事情:
我正在尝试删除使用 powershell 和 del 生成的文件,但收到此消息
del : Cannot remove item C:\Users\stefano.borini\<redacted>\.tox\py36\Include\fakepq.h: You do not have sufficient access rights to perform this operation.
At line:1 char:1
+ del .\.tox\
+ ~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (fakepq.h:FileInfo) [Remove-Item], IOException
+ FullyQualifiedErrorId : RemoveFileSystemItemUnAuthorizedAccess,Microsoft.PowerShell.Commands.RemoveItemCommand
del : Cannot remove item C:\Users\stefano.borini\<redacted>\.tox\py36\Include\fakesql.h: You do not have sufficient access rights to perform this operation.
Run Code Online (Sandbox Code Playgroud)
但是,我可以右键单击这些项目并从 Windows 资源管理器中删除它们,没有任何问题。为什么?
我有一些测试我用适当的标记标记。如果我运行 pytest,默认情况下它们会运行,但我想默认跳过它们。我知道的唯一选择是在 pytest 调用时明确说“不标记”,但我不希望它们默认运行,除非在命令行明确询问标记。
%in% 不按逻辑预期工作:
> 1 %in% list(1,NULL,3)
[1] TRUE
> NULL %in% list(1,NULL,3)
logical(0)
Run Code Online (Sandbox Code Playgroud)
如果列表包含 NULL 元素,如何获得 TRUE 响应?
我总是想知道XML解析器如何处理URI命名空间的检查.是基于字符串还是基于URI?换句话说,这是SVG的标准URI
xmlns="http://www.w3.org/2000/svg"
Run Code Online (Sandbox Code Playgroud)
假设我写了
xmlns="http://www.w3.org/2000/../2000/svg"
Run Code Online (Sandbox Code Playgroud)
要么
xmlns="http://www.w3.org/2000/svg/"
Run Code Online (Sandbox Code Playgroud)
甚至
xmlns="http://www.w3.org:8000/2000/svg"
Run Code Online (Sandbox Code Playgroud)
这些情况是否会被识别为svg名称空间(基于URI)或不基于字符串(基于字符串)?
谢谢
编辑:您可以使用URN(如uuid)这一事实让我觉得它是基于字符串的,因为您无法将正确的URL/URI注意事项应用于非类似URL的URI.但也许在这种情况下,它只是作为一个字符串工作?
编辑:正如Tormod指出的那样,它是用字符串比较的.这提示我想知道是否存在定义URI的建议(例如:最后没有斜杠,全部小写等等).或者它只是一个免费的?
我需要创建对象并在Web上提供它们.与stackoverflow类似,我有类似的东西.
http://stackoverflow.com/users/78374
Run Code Online (Sandbox Code Playgroud)
但是,在我的情况下,我创建的对象的ID必须是唯一的,所以我在想一个UUID,导致像这样的URL
http://example.com/users/{8e931066-7d87-4f2b-a3b5-608c4c9a9083}
Run Code Online (Sandbox Code Playgroud)
因为稍后我将不得不将不同的数据库合并在一起,我不希望合并问题.
这是一种公认的做法吗?有哪些替代方案?
在jQuery库中,我发现了这一行
jQuery.extend = jQuery.fn.extend = function() {
Run Code Online (Sandbox Code Playgroud)
这种困惑让我感到困惑.我认为一个给定的对象自动提供对其原型方法的访问(换句话说,如果一个方法或var没有在对象本身上解析,则在其原型上尝试,然后在原型的原型上等等).
那么,将功能与对象和原型相关联的原因是什么?(在jQuery fn中是原型的别名).
假设你有一个python包的以下布局
./a
./a/__init__.py
./a/_b.py
Run Code Online (Sandbox Code Playgroud)
在__init__.py你的内心
from _b import *
Run Code Online (Sandbox Code Playgroud)
你在_b.py里面
class B(object): pass
Run Code Online (Sandbox Code Playgroud)
如果从交互式提示导入
>>> import a
>>> a.B
<class 'a._b.B'>
>>>
Run Code Online (Sandbox Code Playgroud)
我怎样才能完全隐藏_b的存在?
我试图解决的问题如下:我想要一个导入"隐藏"模块和类的Facade包.从外观(在我的情况下a)可用的类保持稳定并保证将来.但是,我希望自由地在"引擎盖下"重新定位类,因此隐藏模块.这一切都很好,但是如果一些客户端代码挑选了一个由Facade提供的对象,那么这个pickle数据将引用隐藏模块嵌套,而不是外观嵌套.换句话说,如果我B在模块中重新定位类_c.py,客户端代码将无法解开,因为pickled类指的是a._b.B已移动的.如果他们提到a.B,我可以在引擎盖下尽可能多地重新安置B级,而不会破坏腌制数据.
python ×2
assembly ×1
c ×1
c++ ×1
elf ×1
g++ ×1
gcc ×1
javascript ×1
linker ×1
linux ×1
llvm-codegen ×1
namespaces ×1
powershell ×1
pytest ×1
r ×1
url ×1
uuid ×1
windows ×1
x86-64 ×1
xml ×1