[ 问题记录 ] 针对基础的查漏补缺

大端序和小端序问题

大端序,靠后的值存在靠前的地址。笼统上来说是这样的,那具体到地址和数值又是啥样的呢

|--------|--------|--------|--------|--------|--------|--------|--------|
|地址起点																|地址终点

每一块都是一个字,没两块组成一个字节,如果比如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 是不够的。
上一篇:Linux原始套接字抓取底层报文


下一篇:java 07