上一次,我们说到了全局变量和局部变量,并且介绍了局部变量在函数返回后,就会被释放。而全局变量却可以一直保存到程序结束,这是为什么呢?在回答这个问题之前,请看下面这张非常经典的图:
这个图就是程序在运行所需的内存布局。简单来说,就是程序在运行时会占用内存,占用的内存每个区域用途都...
lcc
4个月前 (11-02) 171℃ 0评论
0赞
上次我们说到现代编译器已经非常聪明,为了保证程序的执行效率,会在编译时对代码做优化。水平较低的程序员写出的代码比较臃肿,编译器的优化确能够增加程序的执行效率。但是,编译器有时“聪明过了头”,自以为是的把有用的语句优化掉了,反而导致程序不能正常工作。
例如下面这几句代码,
int...
lcc
4个月前 (10-29) 127℃ 0评论
1赞
pread 和 pwrite 函数是 linux 下 C 语言编程中非常好用的 IO 操作函数。它们属于系统调用,在 2.1.60 之后版本的 linux 下都可以使用,尤其适合用于多线程的应用中,它们允许多个线程操作同一个文件描述符,不会互相影响彼此的文件偏移(offset)。...
lcc
4个月前 (10-25) 445℃ 0评论
2赞
linux 下 c 语言编程,使用多线程是方便的。有时候,我们需要函数创建线程后立刻返回,线程继续在后台运行。可是,却很容易出现段错误(Segmentation fault),请看下面这段代码:
#include <stdio.h>
#include <pth...
lcc
4个月前 (10-23) 208℃ 0评论
3赞
程序的非逻辑错误
程序出错大体可以分两种,一种是出错时,程序不会退出,可以继续往下执行,例如 open 文件失败,也只是无法打开文件而已,程序还可以执行我们设定的错误处理语句,比如打印出错误信息等。还有一种错误发生时,程序直接就退出了,例如非法操作指针引起的段错误,把 0 做被除...
lcc
4个月前 (10-21) 196℃ 0评论
2赞
使用 mkfifo 创建一个 FIFO 特殊文件,可用于进程间通信。这种特殊文件,不占磁盘空间,但是可以像普通文件一样读写。
mkfifo 函数简介
mkfifo 的原型和所需头文件如下:
#include <sys/types.h>
#include <sy...
lcc
4个月前 (10-18) 266℃ 0评论
1赞
查看 linux 主机的 cpu 信息
在linux主机下执行lscpu命令,可以得到如下结果:
$ lscpu | grep -i 'core.*:|socket'
Thread(s) per core: 2
Core(s) per socket: 2
Socket...
lcc
4个月前 (10-11) 328℃ 0评论
0赞
c语言的const关键字用于声明(定义)只读变量,可用于保护某些变量的内容在使用中不会被更改。const关键字使用非常简单,在类型声明符前,或者后都是可以的,二者是等价的。例如下面这个 demo:
#include <stdio.h>
int main()
{
...
lcc
5个月前 (09-27) 252℃ 0评论
1赞
在回答题目中的问题之前,先man一下realloc函数:
realloc 函数所在头文件
stdlib.h
realloc 函数原型
void *realloc(void *ptr, size_t size);
realloc 函数说明
该函数将 ptr 指向的内存大小修...
lcc
5个月前 (09-17) 347℃ 0评论
4赞
下面这段代码,是利用 pthread 库进行多线程编程的最简单的 demo 了:
#include "stdio.h"
#include "pthread.h"
//#include ...
void* testOcupMem(void* p)
{
// pthrea...
lcc
5个月前 (09-17) 340℃ 0评论
4赞