大端序和小端序问题
大端序,靠后的值存在靠前的地址。笼统上来说是这样的,那具体到地址和数值又是啥样的呢
|--------|--------|--------|--------|--------|--------|--------|--------|
|地址起点 |地址终点
每一块都是一个字,没两块组成一个字节,如果比如0x12345678按照小端序存储的话
一般开辟空间的话存储,首字在低字节
如下图
----------------------- 最高内存地址 0xffffffff
| 栈底
.
. 栈
.
栈顶
-----------------------
|
|
\|/
NULL (空洞)
/|\
|
|
-----------------------
堆
-----------------------
未初始化的数据
----------------(统称数据段)
初始化的数据
-----------------------
正文段(代码段)
----------------------- 最低内存地址 0x00000000
可以通过代码验证自己的大小端序,还可以通过下面的方法改变大小字节序。
#include <stdio.h>
int main() {
int a = 0x12345678, result;
char*b = (char*)&a;
printf("%x/n", *b);
result = ((a & 0x000000ff) << 24) |
((a & 0x0000ff00) << 8) |
((a & 0x00ff0000) >> 8) |
((a & 0xff000000) >> 24);
printf("%x\n", result);
// char *b =
return 0;
}
结果如下
C++各个类型之间转换发生了什么?
1、char → int
char b = 'a'; int a = (int)b;
大致的汇编如下(粗略解释,不太懂汇编)
char b = 'a';
00191718 mov byte ptr [b],61h // 一字节存放61h
int a = (int)b;
0019171C movsx eax,byte ptr [b] // 移动到两字节处,高位FF,eax累加器中
00191720 mov dword ptr [a],eax // 移动到四字节a
2、int → char
int b = 0x12345678; char a = (char)b; // a=0x78
大致的汇编如下(粗略解释,不太懂汇编)
int b = 0x12345678;
00541718 mov dword ptr [b],12345678h // 四字节12345678存入
char a = (char)b;
0054171F mov al,byte ptr [b] // 单字节,只取低字节数
00541722 mov byte ptr [a],al // 单字节,存入
3、int[] → char
int b[3] = { 1,2,3 };short a = (short)b; //这里a是改变后的short指针
int b[3] = { 1,2,3 }; // b只是int型指针
00F74172 mov dword ptr [b],1
00F74179 mov dword ptr [ebp-10h],2
00F74180 mov dword ptr [ebp-0Ch],3
short a = (short)b;
00F74187 lea eax,[b]
00F7418A mov word ptr [a],ax // 不改变b中的内容
4、强制转换的话
int b = 1; short a = static_cast<short> (b);
int b = 1;
00CB4168 mov dword ptr [b],1
short a = static_cast<short> (b);
00CB416F mov ax,word ptr [b] // 一致
00CB4173 mov word ptr [a],ax
C++中const和static的对象都存在哪里?
(来源于网络,没有自己验证过)
全局变量和静态变量放在全局区;
局部变量放在栈区
动态申请的内存在堆区
register变量在寄存器
字符串常量在文字常量区
redis有多快?
使用redis-benchmark -n 10000000 -q 来验证,-n是总请求,-q是静默执行,只显示每秒次数
在我的电脑上运作的是基本上12万请求每秒,我的cpu是gtx950的
更详细的https://blog.csdn.net/shenchaohao12321/article/details/87562020
一般影响Redis性能的因素
影响因素 | 理由 |
---|---|
CPU | 是单线程模型,Redis 更喜欢大缓存快速 CPU |
虚拟机 | 虚拟化对普通操作会有额外的消耗,很多 CPU 时间被消费在系统调用和中断上面 |
网络带宽和延迟 | 比如将 4 KB 的字符串塞入 Redis,吞吐量是 100000 q/s,那么实际需要 3.2 Gbits/s 的带宽,所以需要 10 GBits/s 网络连接, 1 Gbits/s 是不够的。 |