一些问题的整理【持续更新】

一 、 使用虚拟地址空间的好处是什么?
  1. 让每个进程拥有了相同的、独立内存空间,相互之间不会干扰
  2. 读写内存更安全。由于系统和MMU的限制,使得进程无法操作到其他进程的数据。
  3. 不连续的物理空间可以映射成连续的虚拟地址空间
  4. 进程分配的内存空间只有在实际使用时,才会触发缺页异常来分配实际物理空间,从而最大程度减少了内存空间的浪费。
    【MMU:Memory Management Unit的缩写,中文名是内存管理单元,它是CPU中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权,多用户多进程操作系统。】
二、 如何设置一个文件重启后删除?

MoveFileEx(szDstFile, NULL, MOVEFILE_DELAY_UNTIL_REBOOT);·

WINBASEAPI
BOOL
WINAPI
MoveFileExA(
    __in     LPCSTR lpExistingFileName,
    __in_opt LPCSTR lpNewFileName,
    __in     DWORD    dwFlags
    );
WINBASEAPI
BOOL
WINAPI
MoveFileExW(
    __in     LPCWSTR lpExistingFileName,
    __in_opt LPCWSTR lpNewFileName,
    __in     DWORD    dwFlags
    );
#ifdef UNICODE
#define MoveFileEx  MoveFileExW
#else
#define MoveFileEx  MoveFileExA
#endif // !UNICODE

dwFlags的值 :

  • MOVEFILE_REPLACE_EXISTING = 0x00000001; // 覆盖已存在的目标文件,如果来源文件和目标文件指定的是一个目录,则不能使用此标记。
  • MOVEFILE_COPY_ALLOWED = 0x00000002; // 如果目标文件被移动到不同的卷上,则函数通过拷贝后删除来源文件的方法来模拟移动文件操作。
  • MOVEFILE_DELAY_UNTIL_REBOOT = 0x00000004; // 在系统重新启动前,不执行移动操作,直到系统启动后,磁盘检测完毕后,创建页面文件之前,执行移动操作。因此,这个参数可以删除系统之前启用的页面文件。这个参数只能被拥有 管理员权限 或 LocalSystem权限 的程序使用。这个参数不能和 MOVEFILE_COPY_ALLOWED 一起使用。
  • MOVEFILE_WRITE_THROUGH = 0x00000008; // 这个标记允许函数在执行完文件移动操作后才返回,否者不等文件移动完毕就直接返回。如果设置了 MOVEFILE_DELAY_UNTIL_REBOOT 标记,则 MOVEFILE_WRITE_THROUGH 标记将被忽略。
  • MOVEFILE_CREATE_HARDLINK = 0x00000010; // 系统保留,以供将来使用
三、数据格式化输出
参数对应类型
%a浮点数、十六进制数字和p-计数法
%A浮点数、十六进制数字和p-计数法
%c一个字符(char)
%C一个ISO宽字符
%d有符号的十进制整数(int)
%mdm为指定的输出字段的宽度(如果数据的位数小于m,则左边补以空格,若大于m,按实际位数输出)
%e浮点数、e-计数法
%E浮点数、E-计数法
%f单精度浮点数(默认float)、十进制计数法
%lf双精度数
%.nf这里n表示精确到小数点后n位的十进制计数
%g根据数值不同自动选择%f或%e
%G根据数值不同自动选择%f或%e
%i有符号的十进制数(与%d相同)
%o无符号的八进制整数
%p指针
%s对应字符串(cahr*)
%S对应宽字符串(WCHAR*)
%u无符号十进制整数(unsigned int)
%x十六进制整数
%X十六进制整数
%%打印一个%
%I64d用于INT64或long long、unsigned long long
四、LARGE_INTEGER转时间(文件时间转系统时间)
	CString strEventTime = L"";
	LARGE_INTEGER mLargeIntegerTime;
	FILETIME fileTime;
	fileTime.dwHighDateTime = mLargeIntegerTime.HighPart;
	fileTime.dwLowDateTime = mLargeIntegerTime.LowPart;
	SYSTEMTIME sysTime;
	FileTimeToSystemTime(&fileTime, &sysTime);//将文件时间转换为标准系统时间
	strEventTime.Format(_T("%4.4d-%2.2d-%2.2d %2.2d:%2.2d:%2.2d"),
		sysTime.wYear, sysTime.wMonth, sysTime.wDay, sysTime.wHour, sysTime.wMinute, sysTime.wSecond);
时间&&时间差

//获取本地时间(转字符串)

		time_t timeNow;
		time(&timeNow);
		tm tm1 = {0};  
		errno_t eResult = 0;
		eResult = localtime_s(&tm1, &timeNow);
	
		CString strTime = _T("");
		if ( eResult == 0)
		{
			strTime.Format( _T("%4.4d-%2.2d-%2.2d %2.2d:%2.2d:%2.2d"),  
				tm1.tm_year+1900, tm1.tm_mon+1, tm1.tm_mday,  
				tm1.tm_hour, tm1.tm_min,tm1.tm_sec);  
		}

//时间差

time_t time1,time2;
time(&time1);
time(&time2);
double dbTimeCount = difftime(time2, time1);	//单位s
五、 CString 崩溃

1、 CString.MakeLower有概率崩溃,尽量改用CharLower
2、 CString FormatV

  • std::string格式化输出,日志接口可变参数是(LPCTSTR lpszFormat, …)
std:string strData1 = "key"
//调用的时候strData1.c_str()直接输出会乱码==》CA2W(strData1.c_str(), CP_ACP);转一下再输出
//转完了不是乱码了,但是崩溃了。。。跟踪dump知道,崩溃位置出在FormatV,然后是转的这个参数
//虽然没搞懂最根本的原因是啥。。。但是,在CA2W的外面套了一层CString()就不崩了。。。
//so。。。这种格式化输出的位置,尽量用WCHAR*和CString吧。。。
六、 成员变量调用崩溃
  • delete this之后,不要再使用任何它的成员,原因见:
    https://blog.csdn.net/qq_43678418/article/details/87789974
七、 编译器对于未初始化的局部变量的处理

在这里插入图片描述

八、 运行时库
  • C支持库包含从内存分配、错误处理、字符串处理、浮点计算、数据类型转换、文件和输入输出等方面的大量函数。
  • C++标准库是为了方便使用C++语言编程而设计的一套函数、常量、类和对象库,包括标准输入输出、字符串、容器(列表、队列、map等)、排序和搜索算法、数学运算等。
  • C++标准库由三大部分组成:C标准库、IO流、标准模板库(即STL)
九、 GitHub使用相关问题

https://blog.csdn.net/qq_36308972/article/details/103810559

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值