有没有办法禁止使用全局变量?
我希望GCC在定义全局变量时在编译时生成错误.
我们有一个应该按线程运行的代码,并且只允许使用堆栈(这是线程安全的)
有办法强制执行吗?
一些GCC标志或其他方式来验证它?
似乎即使我释放了由malloc()分配的Linux进程的所有内存之后,内存仍然为该进程保留,并且没有返回给OS。
默认情况下运行valgrind massif工具不会泄漏。
使用--pages-as-heap = yes运行valgrind会显示以下内容:
-> 13.77%(7,655,424B)0x35FEEEB069:brk(brk.c:31)
-> 13.77%(7,655,424B)0x35FEEEB113:sbrk(sbrk.c:53)
-> 13.77%(7,655,424B)0x35FEE82717:__default_morecore(morecore.c:48)
-> 13.77%(7,655,424B)0x35FEE7DCCB:_int_malloc(malloc.c:2455)
-> 13.77%(7,655,424B)0x35FEE7F4F1:malloc(malloc.c:2862)
因此,即使内存已经由free()释放,似乎malloc调用了brk / sbrk,也没有将其返回给操作系统。
如何强制free()立即调用sbrk()并将所有内存返回给OS?
我在每个MB都非常重要的低端平台上运行。
提前致谢。
我有一小组数字,我经常需要搜索.
这个群体是静止的,并且在开始时就已知道了.
我从观察中得知,我搜索的数字大部分时间都不属于小组.
我正在寻找的是一个算法,在一两条指令中:
例如,
如果数字是x,y,zi可以执行以下操作:
保存:
tmp = (x | y | z)
Run Code Online (Sandbox Code Playgroud)
当我搜索一个我可以做的数字时:
if ((num & tmp) == (num))
do the real search
Run Code Online (Sandbox Code Playgroud)
如果数字是x,y或z,则保证在执行AND时返回num.如果不是我可能会搜索什么 - 但那基本上没问题.
这个测试的主要问题是,即使num不在组中,组i中超过5个数字的大部分时间也会变为TRUE.
我在考虑使用XOR魔法:
tmp = (x ^ y ^ z)
Run Code Online (Sandbox Code Playgroud)
当搜索时做类似的事情:
(num ^ tmp)
Run Code Online (Sandbox Code Playgroud)
但我不明白这是如何帮助我确定元素是否在组中.
有任何想法吗 ?
谢谢,
伊泰
UPDATE
我发现有用的是使用像一个非常简单的布隆过滤器:
我将x,y和z散列为位数组(例如8位).然后,我已将结果转移到正确的位:
uint8_t digest = (1 << (x % 8)) | (1 << (y % 8)) | (1 << (z % 8))
Run Code Online (Sandbox Code Playgroud)
以及我用过的搜索功能:
if ( (1 << (num % 8)) & …
Run Code Online (Sandbox Code Playgroud) 当我启动 GDB 时,目标进程会打印大量数据,因此我想将其重定向到 NULL 直到某个时间点。
到目前为止,我发现的唯一两种方法是:
运行 > 文件名
tty 文件名
问题是我找不到将劣质的标准输出恢复正常的方法。
没有“tty default”或“default tty”
谢谢,
伊泰
在构建C++项目时,我们有多个目标:32位和64位.
在一些64位机器上,在构建32位目标时,我们遇到了失败,因为缺少g ++ - multilib:
/usr/include/features.h:374:25: fatal error: sys/cdefs.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我的问题是:
根据安装的编译器和glibc包,查询当前机器是否能够生成32位映像的最佳方法是什么.
例如,一种解决方案可能是生成一个包含多个glibc包含的简单C文件,并查看我是否能够编译模拟文件.
这似乎不是优雅的解决方案.
相反,我想查询机器,看看是否安装了所有nesscary软件包.
PS:
我们使用WAF作为构建基础架构.
谢谢,
伊泰