ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-03-13 23:02:02  阅读:225  来源: 互联网

标签:-------- 查漏 short 记录 int mov char 补缺 ptr


大端序和小端序问题

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

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

每一块都是一个字,没两块组成一个字节,如果比如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 是不够的。

标签:--------,查漏,short,记录,int,mov,char,补缺,ptr
来源: https://blog.csdn.net/qq_39857929/article/details/114762367

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有