我正在寻找处理不可复制对象的最佳实践.
我有一个互斥类,显然不应该是可复制的.我添加了一个私有拷贝构造函数来强制执行.
这破坏了代码 - 有些地方只需要修复,但我有一个通用的问题,一个类,使用互斥量作为数据成员,或通过继承,被插入到容器中.
这通常发生在容器初始化期间,因此互斥锁尚未初始化,因此可以,但没有复制构造函数它不起作用.更改容器以包含指针是不可接受的.
有什么建议吗?
我正在维护一个具有需要线程特定变量的函数的库.由于gcc 4.2中的错误,如果我在x中定义静态__thread; 当通过PERL中未命名的API调用库函数时,它会挂起.
我想使用pthread_key_create()定义线程局部变量,但是我需要在库中执行它,并且在创建线程时我没有得到任何特殊调用.
如何创建线程局部变量,只有它不存在?就像是
pthread_key_t tlsKey = 0;
int x;
myfunc()
{
if (pthread_key_t == 0){
pthread_key_create(&tlsKey, NULL);
pthread_setspecific(tlsKey, &x);
}
int& myx = pthread_getspecific(tlskey);
if (myx == 0){
myx=1;
something_under_myx_lock();
myx = 0;
} else {
cout << "locked in thread\n";
}
Run Code Online (Sandbox Code Playgroud)
}
注意:如果你想知道,我需要在线程中锁定的原因是为了使这个函数信号安全,以及线程安全.
将应用程序从32位升级到64位会增加指针大小和对象的内存占用量.
我正在寻找尽可能减少对象内存占用的方法.对于POD结构,我转储结构的内存布局,以找出如何打包成员并减少编译器填充.
有没有办法找出非POD对象的内存布局,如类实例?我怎么能实现类包装类对象的东西?
谢谢,丹
#include <stdint.h>
uint64_t rip;
int main()
{
asm(
"movq %%rip, %0\n" : "=m" (rip)
);
sleep(10);
}
Run Code Online (Sandbox Code Playgroud)
当我编译我得到
cc -m64 rip.c -o rip
/tmp/ccwNbZi1.s: Assembler messages:
/tmp/ccwNbZi1.s:12: Error: suffix or operands invalid for `movq'
make: *** [rip] Error 1
Run Code Online (Sandbox Code Playgroud) 我想在没有通过递归make调用打开-w标志的情况下运行我的makefile.执行此操作的标志是make命令行上的--no-print-directory.
是否可以在makefile中指定该标志?
我打算让这个标志依赖于VERBOSE模式,也许是类似的东西
$(if $(VERBOSE),,MAKEFLAGS += no-print-directory))
Run Code Online (Sandbox Code Playgroud)
谢谢,丹
我需要编写一些gdb宏,这些宏需要在32位和64位体系结构之间有所不同。我正在寻找一种在gdb中确定调试的可执行文件是32位还是64位的方法。
信息目标包括有关文件类型的信息
例如文件类型elf32-i386
但这嵌入在更长的输出中。
作为gdb宏的新手,我不知道如何处理该输出,或者不知道如何获得此输出。
请暂时没有python gdb。
所以我有自己的uint64_t到uint32_t数字转换的政策
struct MyOverflowHandlerPolicy
{
void operator() ( boost::numeric::range_check_result ) {
std::cout << "MyOverflowHandlerPolicy called" << std::endl;
throw boost::numeric::positive_overflow();
};
} ;
Run Code Online (Sandbox Code Playgroud)
如何让它被boost :: numeric_cast使用?
sl4a的所有脚本都在/ sdcard/sl4a/scripts下
是否可以运行其他地方的脚本:
例如来自/ sdcard/dropbox/pyscripts [wink wink]
我正在使用一个可能很危险的宏:
#define REMAINDER(v, size) ((v) & (size -1))
Run Code Online (Sandbox Code Playgroud)
显然它假设大小是2的幂.
我想确保大小确实是2的幂,但在编译时.(在运行时测试很容易,但不是我想要的).
对我来说一个充分的测试就是大小总是一个常数(从不变量).
我会用BOOST_STATIC_ASSERT,但我无法弄清楚如何使用它来满足我的需要.
有没有办法,可能使用nm或gdb,这将让我创建一个可执行文件包含的所有对象类型的列表?
为了澄清,我有源代码.我需要一种方法来计算运行时使用的所有类/结构大小.所以这可能是一个两部分问题: