我试图理解gcc交叉编译器背后的命名约定,但似乎有相互矛盾的答案.我的系统中有以下三个交叉编译器:
在阅读GNU libtool手册时,它将交叉编译器命名约定指定为:
cpu-vendor-os(os = system/kernel-system)
对于我的系统中的编译器来说,这似乎并不完全准确.GNU手册中的信息是旧的,还是编译器分销商只是停止了它?
compiler-construction gcc naming-conventions cross-compiling
是否可以在使用Android NDK编译的本机C代码中设置CPU亲和力?由于系统使用的是Linux内核,因此应该可以使用sched_setaffinity/sched_getaffinity函数,但是当我使用NDK进行编译时,我会收到错误抱怨cpu_set_t类型未知(用作函数的参数) .有没有其他方法可以实现这一目标?当我使用CodeSourcerys ARM编译器(arm-none-linux-gnueabi-gcc)编译时,这似乎不是问题,因此系统显然支持所需的系统调用.
情况:
我有一段代码在编译为32位时有效,但在使用gcc 4.6编译为64位时失败.在确定问题并阅读标准后,我无法理解为什么它适用于32位.我希望有人能解释发生了什么.
代码(稍微简化并减少到有趣的部分):
// tbl: unsigned short *, can be indexed with positive and negative values
// v: unsigned int
// p: unsigned char *
tmp = tbl[(v >> 8) - p[0]]; // Gives segfault when not compiled with -m32
Run Code Online (Sandbox Code Playgroud)
用-m32代码编译时编译.在没有-m32它的情况下进行编译会产生段错误.segfault的原因是(v >> 8) - p[0]被解释unsigned int为64位编译时,"负"结果将被关闭.
根据这个问题,C99标准说明如下:
6.2.5c9:A computation involving unsigned operands can never overflow, because a result that cannot be represented by the resulting unsigned integer type …
我正在为Android开发一个本地库,我使用ARM程序集优化和多线程,以便在双核ARM芯片组MSM8660上获得最大性能.在进行一些测量时,我注意到以下内容:
我试过在网上搜索一下这个原因的解释,但到目前为止还没找到.几乎所有内核都共享相同的NEON管道或类似内容,但所有原理图似乎都表明每个内核都应该有自己的NEON单元.有谁知道为什么会这样?
这个问题是为了回应C中的什么是&&&操作让我想到&被用作二进制AND和地址.
为什么这些非常不同的任务使用相同的符号?在考虑它时,@似乎是一个更好的符号.
我不认为它会在实践中引起太多问题,因为编译器可能会捕获大多数错误的用法,但它可能会创建涉及宏的代码,看起来它正在执行二进制AND而它实际上正在执行地址.
我非常喜欢Flame Graph的概念,因为它有助于消除不必要的函数调用.然而,有一个问题是它需要分析器在每次收集样本时执行完整的堆栈转储.这可以通过DTrace或SystemTap轻松完成,但我需要能够在运行ubuntu的ARM设备上执行此操作(这会消除DTrace).我还想在不重新编译内核的情况下执行此操作(这会消除SystemTap).
是否有可能获得Valgrind/Callgrind或OProfile(或其他可以在Ubuntu中的ARM设备上运行的分析工具)输出类似于:
dtrace -n 'profile-1001 /pid == 12345 && arg1/ { @[ustack()] = count(); }
我们的团队最近开始尝试使用Phabricator进行代码审查.
除了Phabricator之外,我们还有一个测试系统,可以自动构建和测试推送到主git仓库中特定分支的任何代码.有没有办法arc diff自动将diff推送到特定的分支?测试通常需要几个小时,我希望人们可以在测试时查看代码.它可以以某种方式集成为单元测试,在发送差异之前不必完成审查吗?
c ×3
arm ×2
gcc ×2
multicore ×2
32bit-64bit ×1
android-ndk ×1
assembly ×1
git ×1
linux ×1
neon ×1
performance ×1
phabricator ×1
profiling ×1
stack-trace ×1
syntax ×1
unsigned ×1
valgrind ×1