基础知识
wenfh2020
个人博客 - wenfh2020.com
展开
-
变量的内存分布(Linux)
程序进程是不能直接访问物理内存的,系统通过虚拟内存方式管理进程内存。图片来源 《深入理解计算机系统》8.2.3 私有地址空间工作流程高级语言 -> 编译器 -> 低级语言指令 -> 内核系统 <—> 硬件。测试系统发现 MacOS 和 Centos 的 gcc 编译出来的 elf 文件变量布局有点不一样。现在在 Centos 系统下进行测试。C...原创 2020-02-17 16:14:45 · 224 阅读 · 0 评论 -
比较宏和宏函数的工作效率
通过 gdb 查看程序的汇编代码,比较宏和宏函数的工作效率。程序例子中的最大值实现,宏和函数逻辑基本相同。宏在源码预编译阶段,被替换为代码,增加了代码的体积;函数多了参数传递,函数进栈和出栈等逻辑,自然资源消耗要比宏多。测试代码#define _max(x, y) (x) > (y) ? (x) : (y)int max_func(int x, int y) { ...原创 2020-02-16 02:16:44 · 330 阅读 · 0 评论 -
大小端
大小端就不说详细定义了。小端特征:数据的低字节保存在内存低地址,高字节保存在内存高地址。注意:数据类型 char 和 unsigned char 类型是没有大小端之分的。网络通信中,终端与服务器的通信数据需要保证大小端一致,终端和服务端约定一种方式,进行通信即可。例如约定小端模式。那么终端在数据传输前,要将数据类型进行检测处理。int little = 1;if (*(char...原创 2020-02-10 22:11:30 · 126 阅读 · 0 评论 -
linux 下实现 itoa 转二进制
linux 下,需要将整数转化为二进制,很自然想到 itoa,发现这函数竟然编译不通过。标准库中貌似有这个实现,不明白了~ 网上参考了帖子,下面实现代码:方法一感觉这方法有点费脑,不是很直观。取模的方法一般都是从低位到高位,所以保存的字符串结果一般会跟需要的结果相反,需要倒转,要解决这个问题,可以从字符串数组后面开始往前保存。#include <stdio.h>#inc...原创 2020-01-15 13:23:25 · 945 阅读 · 0 评论 -
linux 常用命令
系统机器启动poweroffrebootshutdown -r now修改密码passwd root查看 CPUcat /proc/cpuinfo | grep "processor" | wc -l查看系统内存情况free -m查看系统信息uname -acat /proc/versioncat /etc/redhat-release软链接ln -s ...原创 2020-01-05 17:51:19 · 536 阅读 · 0 评论 -
fork 进程测试 copy-on-write
系统macos测试测试对象申请一块内存,主进程 fork 子进程后监测子进程对内存数据修改前后状况。测试源码alloc_data g_data;int main() { pid_t pid = fork(); if (0 == pid) { printf("child pid: %d, data ptr: %#lx\n", getpid(), ...原创 2020-01-02 15:15:40 · 297 阅读 · 1 评论 -
mysql 脚本(*.sql)自动代码(C/C++)工具
使用 protobuf,写个 *.proto 脚本文件,就能通过工具生成相应的代码。这个自动代码工具太有用了:1、数据操作面向对象,操作人性化。2、利于团队代码风格统一。3、直接减少了团队开发的工作量。同理,mysql 导出 sql 的数据库结构文件,其实这也是一个脚本。我们能否通过这个 sql 脚本,像 protobuf 那样,生成类似的自动代码呢。答案是肯定的。网上...原创 2018-05-26 15:02:39 · 913 阅读 · 0 评论 -
嵌套式死锁
锁一般是配对存在,lock 和 unlock,在复杂的业务代码中,锁可能有多个,多个锁一起用,lock 和 unlock 的时序不一样,很可能会掉进坑里。原创 2018-04-03 09:41:58 · 273 阅读 · 0 评论 -
C++ 日志宏定义
C++日志宏定义,如何将格式化字符串,作为参数传递原创 2017-10-28 22:39:36 · 3006 阅读 · 0 评论