0%

关键词typedef

  • 关键字typedef提供了一种为已定义好的数据类型创建同义词的机制,为了创建更简短的类型名,通常使用typedef来为结构体类型起名字;
  • 关键字typedef还长用来为基本数据类型创建一个别名,用于提高程序的可移植性;

释放内存

Linux采取的是最快速操作,就算程序关闭掉,为了后面的可能会用的概率而保证这些数据可能还位于内存中,所以导致4G的内存,随便跑跑程序就到了3.6G了,只剩下几百兆,就算是很大的内存也是如此,我一个同事用的是24G的内存,跑网络程序,随便一跑就到了20多G,这里有个比较简单的释放内存的方法:

1
2
sync
echo 3 > /proc/sys/vm/drop-cache

这样就会释放出很大一部分的内存,但是可能对于网络数据的接收发送有影响,对于实时收发的程序,可以在程序中采取一定的策略。

怎样从函数返回多个值

有下面几种方法用于返回从函数返回多个值

  1. 传入多个指针指向不同的地址,让函数填入需要返回的值
  2. 让函数返回包含需要值的结构
  3. 结合指针和结构,让函数接收结构指针,然后再填入需要的数据
  4. 不得已的时候,可以使用全局变量,但是这个方法不推荐,GOD晓得有没有可能在多线程的其他程序中会修改全局变量,所以这是迫不得已时采用的方法。

启动命令如何不输入./

执行当前文件夹下的可执行程序,不加”./”的方法:

直接执行当前目录下的程序可以使用一下方法:

  1. 将export PATH=$PATH:. 语句(冒号后加一个点)写到用户主目录的.bashrc中;
  2. 将可执行程序拷贝至/usr/bin或者/usr/local/bin (如果程序需要经常修改,还是采用第一种方法较好)

执行当前可执行程序加”./”的原因:

主要是安全原因,因为在linux中执行程序时,会先搜索当前目录然后是系统目录,所以如果当前目录中有与系统可执行程序重名的程序,比如cp,她就会优先执行当前目录中的cp,但是如果当前目录的cp是木马,就会威胁到系统安全,所以这是Linux的一种安全策略,所以默认并没有把当前目录加到环境变量PATH中去。

memcpy和strcpy比较

函数memcpy比函数strcpy速度不会慢:

  1. 函数memcpy是按照机器的字长来拷贝的,现在主要是4字节;
  2. strcpy是单个字节拷贝的;
  3. memcpy函数被优化过;
  4. strcpy有个限制就是遇到’\0’就结束

Mark:当涉及到的两个对象在内存中如果是相互重叠的,则函数memcpy的执行结果是没有意义的,此时应该使用函数memmove。

左值

左值并不完全表示“可以赋值的东西”,更好的定义为:(在内存中)有特定位置的东西。所以,如果没有+1,就要特别注意了。

按值调用

C语言的所有调用都是按值调用,即将函数调用中的实参复制得到一个副本,然后传递给被调函数。所谓的“按引用调用”本质也是按值引用~Gotcha?

关于函数求值顺序

对于类似printf(“%d %d”,f(x),g(x));而言,因为函数调用时的参数求值顺序不确定,所以f()和g()没有确定的先后顺序,所以对于有歧义的i++和++i要特别注意。

安装

gnuplot或许是这个世界上用来分析和可视化数据的最强劲的工具,主要用来绘制2D/3D的数据或者函数图像,但是也包含数学计算、拟合等功能。

gnuplot全名应该读作 “new plot”。

所有的主流 Linux 发行版都包含 gnuplot,因此在 Linux 上安装很简单,比如在Redhat系列输入yum install gnuplot即可,而Debian系列输入apt install gnuplot即可。

对于MacOSX系统,可以通过MacPorts和Homebrew来进行安装。

在 Windows 下,可以直接到 gnuplot 在 sourceforge 的下载网页Download下载新版本(选择包含win64的exe文件即可),下载后即可安装使用。

启动

gnuplot是基于命令行的交互式绘图软件。打 一个终端,输入 gnuplot,随着程序启动,会出 现下面的信息:(如果是在 Windows 电脑上,双击 gnuplot.exe 后会自动打 一个命令行窗口)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ gnuplot

G N U P L O T
Version 5.2 patchlevel 7 last modified 2019-05-29

Copyright (C) 1986-1993, 1998, 2004, 2007-2018
Thomas Williams, Colin Kelley and many others

gnuplot home: http://www.gnuplot.info
faq, bugs, etc: type "help FAQ"
immediate help: type "help" (plot window: hit 'h')

Terminal type is now 'qt'
gnuplot>

欢迎信息包括gnuplot的版本,修改日期,版权等信息。
此时就可以开始输入命令绘图了,或者输入quit和exit退出交互环境。

参考

主要参考《Gnuplot In Action》和《使用 gnuplot 科学作图》,请支持正版。

数学表达式

在gnuplot 里面表达数学公式是很简单的,很多与C语言类似,比如

  • 加、减、乘、除、乘方 用 +,-,,/,* 表示
  • 整数和浮点数 和 C 语 类似
  • 复数用包含在花括号内的 对实数表示,例如{3,5}表示 3 + 5i
  • gnuplot 含有丰富的数学函数,格式和 C 语 几乎相同。对于实数和复数,函数名是一样的。 下面的链接可以看到预定义的函数列表: http://www.gnuplot.info/docs_4.2/gnuplot.html#x1-5300013.1
  • 自定义函数 自定义函数很容易,例如 f(x)=x+1 定义一个一元函数,f(x,y)=x+y 定义一个二元函数。
  • π(圆周率) π 在 gnuplot 里用 pi 表示。

代码如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
gnuplot> print 3+8
11
gnuplot> print 9/4
2
gnuplot> print 9.0/4
2.25
gnuplot> f(x) = x**3
gnuplot> print f(4)
64
gnuplot> f(x,y) = x**3+y**2
gnuplot> print f(3,4)
43
gnuplot>

其中print命令用于把结果输出到屏幕上。

参考

主要参考《Gnuplot In Action》和《使用 gnuplot 科学作图》,请支持正版。

使用gnuplot来理解数据

gnuplot或许是这个世界上用来分析和可视化数据的最强劲的工具。

gnuplot绘制的图形不仅可以自己使用,还可以用于出版和演示。

gnuplot 的优点

  • 稳定、成熟、积极维护中
  • 自由的开源代码
  • 适用于很多平台Windows、Linux 、Mac OS X
  • 生成抛光性很好的图像
  • 支持大多数通用的图像格式
  • 可以直接读取文件作为输入
  • 有处理大数据集的能力(轻松处理百万级数据点),且速度很快
  • 资源消耗少

一些有用的库

使用gnuplot

1
gnuplot > plot "datafile" using 1:2 with boxes

在终端输入gnuplot后,就会进入一个交互环境,在该环境就可以输入命令了。

绘制正弦曲线

1
gnuplot > plot sin(x) with line linetype 3 linewidth 2

sin(x)

同时绘制多条曲线

1
gnuplot > plot sin(x) title 'sin(x)' with line linetype 3 linewidth 2, cos(x) title 'cos(x)' with line linetype 2 linewidth 2

sin(x)

参考

主要参考《Gnuplot In Action》和《使用 gnuplot 科学作图》,请支持正版。