• 好好学习,天天向上~
  • 欢迎欢迎~

 分类:c语言

三分钟弄清楚C语言为何函数退出就不能使用局部变量了,不初始化局部变量会出错吗

上一次,我们说到了全局变量和局部变量,并且介绍了局部变量在函数返回后,就会被释放。而全局变量却可以一直保存到程序结束,这是为什么呢?在回答这个问题之前,请看下面这张非常经典的图: 这个图就是程序在运行所需的内存布局。简单来说,就是程序在运行时会占用内存,占用的内存每个区域用途都...

lcc 4个月前 (11-02) 171℃ 0评论 0

编译器是怎样优化代码的?如何查看编译器是否优化代码?怎样避免编译器优化代码?volatile关键字的使用

上次我们说到现代编译器已经非常聪明,为了保证程序的执行效率,会在编译时对代码做优化。水平较低的程序员写出的代码比较臃肿,编译器的优化确能够增加程序的执行效率。但是,编译器有时“聪明过了头”,自以为是的把有用的语句优化掉了,反而导致程序不能正常工作。 例如下面这几句代码, int...

lcc 4个月前 (10-29) 127℃ 0评论 1

linux多线程编程中IO读写的安全函数,pread/pwrite和read/write有什么区别和联系,实例代码对比

pread 和 pwrite 函数是 linux 下 C 语言编程中非常好用的 IO 操作函数。它们属于系统调用,在 2.1.60 之后版本的 linux 下都可以使用,尤其适合用于多线程的应用中,它们允许多个线程操作同一个文件描述符,不会互相影响彼此的文件偏移(offset)。...

lcc 4个月前 (10-25) 445℃ 0评论 2

linux c语言多线程编程怎么传递参数?创建线程后立刻返回,出现段错误(Segmentation fault)的原因和解决办法

linux 下 c 语言编程,使用多线程是方便的。有时候,我们需要函数创建线程后立刻返回,线程继续在后台运行。可是,却很容易出现段错误(Segmentation fault),请看下面这段代码: #include <stdio.h> #include <pth...

lcc 4个月前 (10-23) 208℃ 0评论 3

linux c语言编程,使用setjmp和longjmp函数自制类似python的try-catch模块捕获异常,处理段错误,浮点错误等信号错误(1)

程序的非逻辑错误 程序出错大体可以分两种,一种是出错时,程序不会退出,可以继续往下执行,例如 open 文件失败,也只是无法打开文件而已,程序还可以执行我们设定的错误处理语句,比如打印出错误信息等。还有一种错误发生时,程序直接就退出了,例如非法操作指针引起的段错误,把 0 做被除...

lcc 4个月前 (10-21) 196℃ 0评论 2

linux多cpu编程,为线程指定cpu,sched_setaffinity和sched_getaffinity的详解与使用,使用time命令得到程序执行时间

查看 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修饰指针时,const char*,char const*和char* const有什么区别?

c语言的const关键字用于声明(定义)只读变量,可用于保护某些变量的内容在使用中不会被更改。const关键字使用非常简单,在类型声明符前,或者后都是可以的,二者是等价的。例如下面这个 demo: #include <stdio.h> int main() { ...

lcc 5个月前 (09-27) 252℃ 0评论 1

linux C语言编程,使用realloc函数后,原内容数据还在吗?原指针还能用吗?原内存被释放吗?

在回答题目中的问题之前,先man一下realloc函数: realloc 函数所在头文件 stdlib.h realloc 函数原型 void *realloc(void *ptr, size_t size); realloc 函数说明 该函数将 ptr 指向的内存大小修...

lcc 5个月前 (09-17) 347℃ 0评论 4