解决 undefined reference to 'pthread_mutex_trylock'

问题 编译时出现 undefined reference to 'pthread_mutex_trylock' 等 pthread 相关函数的链接错误。 原因 POSIX 线程库(pthread)默认不链接,需要手动指定。 解决 编译时添加 -lpthread: gcc main.c -o test -lpthread 或在 Makefile 中: LDFLAGS = -lpthread 推荐 GCC 4.2+ 支持更规范的写法: gcc main.c -o test -pthread -pthread 会同时添加编译和链接所需的标志(包括预处理器宏),比 -lpthread 更完整。

2015年4月30日 · 1 分钟 · Jid

什么是堆?什么是栈?C/C++ 程序员必须搞清楚的概念

“堆"和"栈"在 C/C++ 中有两个不同层面的含义:数据结构层面和系统内存管理层面。初学者经常混淆,本文从两个角度分别说清楚。 一、数据结构层面 栈(Stack) 堆(Heap) 规则 后进先出(LIFO) 满足堆性质的完全二叉树(最大堆/最小堆) 用途 函数调用栈、表达式求值、DFS 堆排序、优先队列 实现 顺序栈或链式栈 数组(通常) 这是数据结构课程中的概念,与内存管理无关。 二、系统内存管理层面 这是 C/C++ 编程中更常见的语境。 程序的内存布局 一个 C/C++ 程序的内存分为以下区域: 高地址 ┌─────────────────┐ │ 栈区(stack) │ ← 向低地址增长 │ ↓ │ │ │ │ (空闲空间) │ │ │ │ ↑ │ │ 堆区(heap) │ ← 向高地址增长 ├─────────────────┤ │ 全局/静态区 │ 全局变量、static 变量 ├─────────────────┤ │ 常量区 │ 字符串常量、const 常量 ├─────────────────┤ │ 代码区 │ 函数体的机器指令 └─────────────────┘ 低地址 栈(Stack) 由系统自动管理,用于存放函数参数、局部变量、返回地址等。 ...

2015年4月21日 · 2 分钟 · Jid