关于LocalAlloc function,参考:https://msdn.microsoft.com/en-us/library/windows/desktop/aa366723(v=vs.85).aspx

关于LocalSize function,参考:https://msdn.microsoft.com/en-us/library/windows/desktop/aa366745(v=vs.85).aspx

关于LocalFree function,参考:https://msdn.microsoft.com/en-us/library/windows/desktop/aa366730(v=vs.85).aspx

以下代码摘自:https://msdn.microsoft.com/en-us/library/windows/desktop/aa366723(v=vs.85).aspx

IDE: Code::Blocks 16.01

操作系统:Windows 7 x64

 #include <windows.h>
#include <stdio.h>
#include <tchar.h> int _cdecl _tmain()
{
LPTSTR pszBuf = NULL; pszBuf = (LPTSTR)LocalAlloc(
LPTR,
MAX_PATH * sizeof(TCHAR)); // Handle error condition
if (pszBuf == NULL)
{
_tprintf(TEXT("LocalAlloc failed (%ld)\n"), GetLastError());
return ;
} //see how much memory was allocated
_tprintf(TEXT("LocalAlloc allocated %d bytes\n"), LocalSize(pszBuf)); // Use the memory allocated // Free the memory when finished with it
LocalFree(pszBuf); return ;
}

在Code::Blocks 16.01中的运行结果:

IDE: Microsoft Visual Studio Community 2017 15.5.2

操作系统:Windows 7 x64

 #include "stdafx.h"

 #include <windows.h>
//#include <stdio.h>
//#include <tchar.h> int _cdecl _tmain()
{
LPTSTR pszBuf = NULL; pszBuf = (LPTSTR)LocalAlloc(
LPTR,
MAX_PATH * sizeof(TCHAR)); // Handle error condition
if (pszBuf == NULL)
{
_tprintf(TEXT("LocalAlloc failed (%d)\n"), GetLastError());
return ;
} //see how much memory was allocated
_tprintf(TEXT("LocalAlloc allocated %d bytes\n"), LocalSize(pszBuf)); // Use the memory allocated // Free the memory when finished with it
LocalFree(pszBuf); getchar(); return ;
}

在Microsoft Visual Studio Community 2017 15.5.2中的运行结果:


造成两个IDE的运行结果不一样的原因,是因为TCHAR在两个IDE中的定义不一样。

在Code::Blocks 16.01中,TCHAR是这样定义的:

typedef CHAR TCHAR;
typedef char CHAR;

而在Microsoft Visual Studio Community 2017 15.5.2中,则是这样的:

typedef wchar_t     TCHAR;

关于LPTR,在Code::Blocks 16.01中,是这样定义的:

#define LPTR 64

而在Microsoft Visual Studio Community 2017 15.5.2中,则这样:

#define LPTR                (LMEM_FIXED | LMEM_ZEROINIT)
#define LMEM_FIXED          0x0000
#define LMEM_ZEROINIT       0x0040

两者是等效的,不过Microsoft Visual Studio Community 2017 15.5.2的定义则比较清晰,一目了然。

关于LMEM_FIXED:Allocates fixed memory. The return value is a pointer to the memory object.

关于LMEM_ZEROINIT:Initializes memory contents to zero.

C++ LocalAlloc() & LocalSize() & LocalFree ()的更多相关文章

  1. Win内存分配函数(GlobalAlloc/HeapAlloc/LocalAlloc/VirtualAlloc)

    Win内存分配函数(GlobalAlloc/HeapAlloc/LocalAlloc/VirtualAlloc) 来源:http://blog.csdn.net/chunyexiyu/article/ ...

  2. delete this及堆破坏检测方法

    作者: Bruce   日期: 2012年06月03日 04:20 周日 发表评论 (0) 查看评论 --END*1--> 0 条评论 --END*2-->1,837 人阅读   程序BU ...

  3. Windows Vista for Developers——第四部分:用户帐号控制(User Account Control,UAC)

    作者:Kenny Kerr 翻译:Dflying Chen 原文:http://weblogs.asp.net/kennykerr/archive/2006/09/29/Windows-Vista-f ...

  4. 关于内存的5个函数(malloc,VirtualAlloc,GlobalAlloc,LocalAlloc,HeapAlloc)

    VirtualAlloc 该函数的功能是在调用进程的虚地址空间,预定或者提交一部分页,如果用于内存分配的话,并且分配类型未指定MEM_RESET,则系统将自动设置为0 一次分配 1PAGE 以上的 R ...

  5. HeapAlloc,GlobalAlloc,LocalAlloc,VirtualAlloc,malloc,new的异同

    1. 首先我们来看HeapAlloc: MSDN上的解释为:HeapALloc是从堆上分配一块内存,且分配的内存是不可移动的(即如果没有连续的空间能满足分配的大小,程序不能将其他零散的 空间利用起来, ...

  6. C#封装好的Win32API

    Kernel.cs using System; using System.Runtime.InteropServices; using System.Text; using HANDLE = Syst ...

  7. Windows、Linux下文件操作(写、删除)错误的产生原因、及解决方法

    catalog . 引言 . Linux平台上涉及的File IO操作 . Windows平台上涉及的File IO操作 0. 引言 本文试图讨论在windows.linux操作系统上基于C库进行文件 ...

  8. 英文不好也能快速"记忆" API

    英文不好不要紧,把API函数导入打字练习类软件,即是练习打字速度,提高编程效率:也能短时间记忆API. 坚持每天打一遍,约2小时,连续打两周,会对API有很好的记忆,此方法是结合英文学习方法!以下是W ...

  9. Delphi内存操作API函数(备查,并一一学习)

    Delphi内存操作API函数System.IsMemoryManagerSet;System.Move;System.New;System.ReallocMem;System.ReallocMemo ...

随机推荐

  1. IDEA在同一窗口导入多个项目

    在同一窗口打开多个项目 1. 当前窗口: 2. 3.  选择import module即可.然后一直点击next导入OK即可. 同一窗口目录下创建多个项目 1.File→New→Module 2.Ja ...

  2. Pycharm 2018 Activation code 在线激活

    1. 下载官方 pycharm https://www.jetbrains.com/pycharm/download/ 2. 点击获取激活码 点击获取激活码 2.1 打开  hosts 文件 2.2  ...

  3. VDB R&D

    VDB Data value visualize: 结论从houdini得知. API常用文字: interior:内部 Narrow-band:窄带 background:窄带外 SDF: XY p ...

  4. python opencv3添加opencv-contrib

    不需要编译或其他操作,只需一句话安装第三方库利用sift等特征提取算法: sudo pip3 install opencv-contrib-python 附网站:https://pypi.python ...

  5. tomcat目录映射

    环境:CentOS 6 + tomcat 7 + jdk 7 目前使用2种方法: 1.tomcat/conf/server.xml <Host name="localhost" ...

  6. 记录 一次深夜救火:datanode.data.dir

    火灾背景: Hadoop集群,4个节点,每一台配置都不一样 火灾现场: 1.突然发现DN4硬盘报警,检查硬盘,发现挂载如下: /home 200GB /home/data 3TB 然后发现datano ...

  7. mongodb 创建更新语法

    创建文档 向MongoDB插入数据,使用insert, 如:db.refactor.insert({"refactor's blog":"http://www.cnblo ...

  8. python练习实例

    #!/usr/bin/python # -*- coding: UTF-8 -*- try: fh = open("testfile","w") fh.writ ...

  9. Cinder模块学习

    理解 Cinder 架构 - 每天5分钟玩转 OpenStack(45)   从本节开始我们学习 OpenStack 的 Block Storage Service,Cinder 理解 Block S ...

  10. 如何将Tomcat添加到服务中【笔记】

    tomcat中自带有添加服务的批处理,所以只需要从命令行界面进入到需要添加到服务的tomcat目录中,执行service.bat install 命令就可以自动添加默认名称的tomcat服务了. 该批 ...