C++中i=i+1,i+=1,i++,++i的区别(从汇编层面分析)
写在前面
在线编译工具链与反汇编工具: https://godbolt.org/;
使用的编译器: x86_64-clang16.0.
内置类型
i = i + 1
int main() {
int i = 0;
i = i + 1;
}
对应的汇编代码:
mov dword ptr [rbp - 4], 0 ;; i = 0
;;-------------- i = i + 1; -------------------
mov dword ptr [rbp - 8], 0 ;; new_i = 0
mov eax, dword ptr [rbp - 8] ;...
Linux内存映射,共享内存与虚拟内存部分系统调用示例总结
写在前面
写一下内存映射/虚拟内存方面的内容总结, 主要参考了Linux/Unix系统编程手册.
内存映射可以用于进程间通信(IPC)和其他很多方面.
内存映射
mmap() 系统调用, 在调用进程的虚拟地址空间中创建一个新的内存映射.
分类
文件映射: 将一个文件的一部分直接映射到调用进程的虚拟内存中. 一旦一个文件被映射之后, 就可以通过在相应的内存区域中操作字节来访问文件内容了.
映射的分页会在需要的时候从文件中加载(也被称为基于文件的映射或者内存映射文件).
匿名映射: 没有对应的文件, 这种映射的分页会被初始化为0.
发生文件映射共享的情况
两个进程映射了一个文件的同一个区域, 此时这两个进程会共享物理内存的相同分页
通...
双向环形链表的增删改查c++完整实现
写在前面
最后写一下双向循环链表吧, 跟前面的没啥太大区别, 注意取余操作以及循环跳出的条件.
代码: GitHub;
节点类-链表类
节点类
和双向链表一模一样.
class ListNode {
public:
int val;
ListNode* prev; // 前驱结点
ListNode* next; // 后继结点
ListNode() : ListNode(0, nullptr, nullptr) {}
ListNode(int x) : ListNode(x, nullptr, nullptr) {}
ListNode(int x, ListNode* _next) : ListNode(x,...
牛客网acm模式输入输出11道题目的c++解答(c标准io版)
写在前面
之前写过关于牛客网的输入输出的题目, 但是是用C++的标准IO写的, 虽然方便, 但是据说速度会很慢, 这里还是再用C重写一遍, 主要用到了scanf和printf.
地址:
牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ (nowcoder.com);
不列出题目了, 直接看链接即可.
11道题的题解
1
#include <cstdio>
using namespace std;
int main(void) {
int a, b;
while (~scanf("%d %d", &a, &b)) printf("%d\n", a + b);
return...
单向环形链表的增删改查c++完整实现
写在前面
刚写了双向链表的, 趁热打铁再来一个环形链表的, 这次就有点复杂了, 但是还是可以接受的.
实现环形链表的关键就是不能通过判断是否遍历到空节点来结束循环, 这会导致死循环. 只能用指针是否遍历回到头结点来判断. (就是说第二次来到头结点)
还有就是取余操作的应用, 一般来说, 给定下标需要判断下表是否在链表的节点长度范围内, 但是环形链表有所不同, 任何一个整数都可以作为下标(空节点的环形链表除外).
完整代码见: GitHub;
取余操作的一个坑
先来看一段Python代码: (ipython)
In [1]: 10%3
Out[1]: 1
In [2]: -10%3
Out[2]: 2
没什么问题, 再来到C这边:
#include ...
双向链表增删改查的c++完整实现
写在前面
写一下双向链表的增删改查, 用C++实现.
完整代码可以看我的GitHub;
节点类-链表类
节点
class ListNode {
public:
int val;
ListNode* prev; // 前驱结点
ListNode* next; // 后继结点
ListNode() : ListNode(0, nullptr, nullptr) {}
ListNode(int x) : ListNode(x, nullptr, nullptr) {}
ListNode(int x, ListNode* _next) : ListNode(x, nullptr, _next) {}
// 委托构造
...
Mysql8的用户创建更新删除提权操作总结
写在前面
操作
参考 MySQL官方文档(真的是好东西)
13.7.1.3 CREATE USER Statement
创建用户
创建可访问公网的用户, 内网的话就是 localhost, 默认是'%', 代表公网用户
The host name part of the role name, if omitted, defaults to '%'.
CREATE USER 'zorch'@'%';
-- 修改密码
ALTER USER 'zorch'@'%' IDENTIFIED BY 'xxxx';
提权/降权
下面的语句需要在root用户或者类似具有修改其他用户权限的用户登录下执行( 而非待修改权限的用户登录下)
GRANT SELECT O...
共计 455 篇文章,57 页。
您是Zorch的第 个小伙伴
Hits