鉴于以下计划,
#include <iostream>
using namespace std;
void foo( char a[100] )
{
cout << "foo() " << sizeof( a ) << endl;
}
int main()
{
char bar[100] = { 0 };
cout << "main() " << sizeof( bar ) << endl;
foo( bar );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出
main() 100
foo() 4
Run Code Online (Sandbox Code Playgroud)
在示例代码中
void foo()
{
static Bar b;
...
}
Run Code Online (Sandbox Code Playgroud)
使用GCC编译是否可以保证b以线程安全的方式创建和初始化?
在gcc的手册页中,找到了-fno-threadsafe-statics命令行选项:
不要发出额外的代码来使用C++ ABI中指定的例程来进行本地静态的线程安全初始化.您可以使用此选项在不需要线程安全的代码中略微减小代码大小.
这是否意味着,默认情况下,GCC的本地静态是线程安全的?所以没有理由明确保护,例如pthread_mutex_lock/unlock?
如何编写可移植代码 - 如何检查编译器是否会添加其防护?或者关闭GCC的这个功能是否更好?
以下代码
#include <iostream>
using namespace std;
int main()
{
const char* const foo = "f";
const char bar[] = "b";
cout << "sizeof(string literal) = " << sizeof( "f" ) << endl;
cout << "sizeof(const char* const) = " << sizeof( foo ) << endl;
cout << "sizeof(const char[]) = " << sizeof( bar ) << endl;
}
Run Code Online (Sandbox Code Playgroud)
输出
sizeof(string literal) = 2
sizeof(const char* const) = 4
sizeof(const char[]) = 2
Run Code Online (Sandbox Code Playgroud)
在32位操作系统上,使用GCC编译.
sizeof计算字符串文字的长度(所需空间)?sizeof?对于子进程,可以使用wait()和waitpid()函数暂停当前进程的执行,直到子进程退出.但是此功能不能用于非子进程.
还有其他功能,可以等待退出任何进程吗?
鉴于下面的代码,为什么foo(T*)选择该功能?
如果我删除它(foo(T*)代码)代码仍然编译并正常工作,但G ++ v4.4.0(以及可能还有其他编译器)将生成两个foo()函数:一个用于char [4],另一个用于char [7].
#include <iostream>
using namespace std;
template< typename T >
void foo( const T& )
{
cout << "foo(const T&)" << endl;
}
template< typename T >
void foo( T* )
{
cout << "foo(T*)" << endl;
}
int main()
{
foo( "bar" );
foo( "foobar" );
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我发现只有废弃的项目,理论和功能列表.但我找不到可以比较两个C++源文件并显示语义差异的工具.
当然,我不会比较两个不相关的文件,或者在10年的开发和维护期间积累的变化.但是,通常在代码审查中讨论的更改将更容易理解,如果与正确的含义一起呈现,而不是在字符/字/行级别进行文本更改
如果foo是float类型,则以下表达式是有效/推荐的吗?
(0.0f == foo * float(0))
Run Code Online (Sandbox Code Playgroud)
无论foo的值如何,它都具有预期的(数学)值吗?
C++标准是定义行为还是特定于实现?
如果两个pthreads在"相同"时间调用msgsnd()函数,将消息发布到同一个消息队列会发生什么?
如果两个进程相同怎么办?它们是线程还是进程是否重要?
特别感兴趣的Linux 2.6.15-2.5#1 SMP PREEMPT Tue Sep 19 10:56:25 CDT 2006 x86_64 x86_64 x86_64 GNU/Linux
已经运行的进程需要特权指令,例如使用 SO_RCVBUFFORCE 套接字选项。该进程作为普通用户进程运行。
如何赋予这个过程能力/权限?基于文件的功能设置仍然是一个梦想吗?
我已经尝试了/usr/sbin/setpcapslibcap 包和cap_set_proc()api 中的实用程序,但该CAP_SETPCAP功能在系统上被阻止(基于 Fedora 4 和 2.6.20 内核的遗留系统),因此它无法为不同的自我授予/删除功能过程。
考虑过为该进程设置临时 root uid,但是有没有办法更改外部已运行进程的有效 UID?setuid()// ...函数seteuid()只能修改当前进程(谁在调用该函数)。
我们有MiniDumpWriteDump()一个进程内崩溃处理程序,它使用DbgHelp编写一个minidump是一个进程崩溃的情况.我知道这不是最好的方法,但目前我们没有其他选择.
问题是:某个可执行文件总是创建0字节转储.但它适用于其他过程.这种行为背后可能的原因是什么?
给定最大可能值,如何简单地表示以十进制形式将此数字写为文本所需的空间?
真正的任务:pid_t使用Linux上的gcc 记录固定长度的进程ids().在std::setw()iomanipulator中使用编译时表达式会很好.
我发现linux/threads.h头包含一个PID_MAX值,该值具有分配给进程的最大pid.所以有
#define LENGTH(t) sizeof(#t)-1
Run Code Online (Sandbox Code Playgroud)
这LENGTH(PID_MAX)将是一个编译时表达式,但不幸的是这个数字是以hexa定义的:
#define PID_MAX 0x8000
Run Code Online (Sandbox Code Playgroud)
我目前最好的解决方案有点奇怪
static_cast<int>( ::floor( ::log(PID_MAX)/::log(10) + 1 ) );
Run Code Online (Sandbox Code Playgroud)
但这是计算运行时并使用math.h中的函数