我最近正在构建一个针对x86-64架构的特定共享库(ELF),如下所示:
g++ -o binary.so -shared --no-undefined ... -lfoo -lbar
Run Code Online (Sandbox Code Playgroud)
这失败,出现以下错误:
在制作共享对象时,不能使用对"本地符号"的重定位R_X86_64_32; 用-fPIC重新编译
当然,这意味着我需要将其重建为与位置无关的代码,因此它适合链接到共享库.
But this works perfectly well on x86 with exactly the same build arguments. So the question is, how is relocation on x86 different from x86-64 and why don't I need to compile with -fPIC on the former?
ISO C++标准是否要求STL容器内任何类型的对象销毁顺序?
std::list/ std::vector/ std::map元素摧毁从开始或容器的末尾开始?std::map在std::pair内部将其元素存储在s中,因此一对中的键在其值之前被销毁(反之亦然)?我有一个基于布局表的固定长度文本记录的解析系统:
parse_table = [\
('name', type, length),
....
('numeric_field', int, 10), # int example
('textc_field', str, 100), # string example
...
]
Run Code Online (Sandbox Code Playgroud)
我的想法是,给定一个消息类型的表,我只需要查看字符串,然后根据表中的条目重新构建一个字典.
现在,我可以处理字符串和正确的整数,但int()不会解析所有空格字段(当然有充分的理由).
我想通过定义int处理空字符串的子类来处理它.这样我就可以改变适当的表条目的类型而不在解析代码中引入额外的kludges(比如过滤器),并且它"只是工作".
但我无法弄清楚如何在子类型中覆盖内置类型的构造函数,因为子类中的定义构造函数似乎没有帮助.我觉得我在这里遗漏了一些关于Python内置类型如何工作的基本内容.
我该怎么做呢?我也愿意接受那些不会增加太多复杂性的替代方案.
如果我有一个联合,C标准保证联合本身将与最大元素的大小对齐.
union U {
long l;
int i;
short s;
char c[2];
} u;
Run Code Online (Sandbox Code Playgroud)
但它对联盟内各个联盟元素的对齐有什么看法呢?以下表达式是否保证是真的?
(&u.l == &u.i) && (&u.i == &u.s) && (&u.s == &u.c[0])
Run Code Online (Sandbox Code Playgroud) 我想减少代码中的一些视觉噪音,并隐藏shared_ptr在这样的typedef后面:
typedef boost::shared_ptr<SomeLongClass> SomeLongClassPtr;
Run Code Online (Sandbox Code Playgroud)
所以这:
void foo(const boost::shared_ptr<SomeLongClass>& a,
boost::shared_ptr<SomeLongClass>& b);
Run Code Online (Sandbox Code Playgroud)
成为这个:
void foo(const SomeLongClassPtr& a, SomeLongClassPtr& b);
Run Code Online (Sandbox Code Playgroud)
另一方面,我担心我会减少代码的显式性.
哪个是更好的风格?
我有一个视频资源位于OAuth 2.0墙后面,想要通过<video>标签显示它.如何Authorization通过视频请求发送标头?
我有一个生成字符串列表的生成器.Python中是否有一个实用程序/适配器可以使它看起来像一个文件?
例如,
>>> def str_fn():
... for c in 'a', 'b', 'c':
... yield c * 3
...
>>> for s in str_fn():
... print s
...
aaa
bbb
ccc
>>> stream = some_magic_adaptor(str_fn())
>>> while True:
... data = stream.read(4)
... if not data:
... break
... print data
aaab
bbcc
c
Run Code Online (Sandbox Code Playgroud)
因为数据可能很大并且需要可流传输(每个片段都是几千字节,整个流是几十兆字节),我不想在将整个生成器传递给流适配器之前急切地评估整个生成器.
Linux /proc/meminfo显示了许多内存使用情况统计信息.
MemTotal: 4040732 kB
MemFree: 23160 kB
Buffers: 163340 kB
Cached: 3707080 kB
SwapCached: 0 kB
Active: 1129324 kB
Inactive: 2762912 kB
Run Code Online (Sandbox Code Playgroud)
他们之间有很多重叠.例如,据我所知,可以有活动页面缓存(属于"缓存"和"活动")和非活动页面缓存("非活动"+"缓存").
我想要做的是测量"免费"内存,但其中包括可能被丢弃的已使用页面,而不会对整个系统的性能产生重大影响.
起初,我倾向于使用"免费"+"非活动",但Linux的"免费"实用程序在其"缓冲区调整"显示中使用"自由"+"缓存",所以我很好奇什么是更好的方法.
当内核内存不足时,丢弃页面的优先级是什么?测量可用内存的更合适的度量标准是什么?
据我所知,GCC支持C++中的所有C99功能.但是如何在C++代码中处理C99严格别名?
我知道在不相关的类型之间使用C转换进行转换不是严格别名安全的,并且可能生成错误的代码,但是C++呢?由于严格别名不是C++标准的一部分(这是正确的吗?),GCC必须指定语义本身.
我想,const_cast与static_cast相关类型之间的演员阵容,因此他们是安全的,而reinterpret_cast可以打破严格走样规则.
这是正确的理解吗?