C++ LocalAlloc() & LocalSize() & LocalFree ()
关于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 ()的更多相关文章
- Win内存分配函数(GlobalAlloc/HeapAlloc/LocalAlloc/VirtualAlloc)
Win内存分配函数(GlobalAlloc/HeapAlloc/LocalAlloc/VirtualAlloc) 来源:http://blog.csdn.net/chunyexiyu/article/ ...
- delete this及堆破坏检测方法
作者: Bruce 日期: 2012年06月03日 04:20 周日 发表评论 (0) 查看评论 --END*1--> 0 条评论 --END*2-->1,837 人阅读 程序BU ...
- Windows Vista for Developers——第四部分:用户帐号控制(User Account Control,UAC)
作者:Kenny Kerr 翻译:Dflying Chen 原文:http://weblogs.asp.net/kennykerr/archive/2006/09/29/Windows-Vista-f ...
- 关于内存的5个函数(malloc,VirtualAlloc,GlobalAlloc,LocalAlloc,HeapAlloc)
VirtualAlloc 该函数的功能是在调用进程的虚地址空间,预定或者提交一部分页,如果用于内存分配的话,并且分配类型未指定MEM_RESET,则系统将自动设置为0 一次分配 1PAGE 以上的 R ...
- HeapAlloc,GlobalAlloc,LocalAlloc,VirtualAlloc,malloc,new的异同
1. 首先我们来看HeapAlloc: MSDN上的解释为:HeapALloc是从堆上分配一块内存,且分配的内存是不可移动的(即如果没有连续的空间能满足分配的大小,程序不能将其他零散的 空间利用起来, ...
- C#封装好的Win32API
Kernel.cs using System; using System.Runtime.InteropServices; using System.Text; using HANDLE = Syst ...
- Windows、Linux下文件操作(写、删除)错误的产生原因、及解决方法
catalog . 引言 . Linux平台上涉及的File IO操作 . Windows平台上涉及的File IO操作 0. 引言 本文试图讨论在windows.linux操作系统上基于C库进行文件 ...
- 英文不好也能快速"记忆" API
英文不好不要紧,把API函数导入打字练习类软件,即是练习打字速度,提高编程效率:也能短时间记忆API. 坚持每天打一遍,约2小时,连续打两周,会对API有很好的记忆,此方法是结合英文学习方法!以下是W ...
- Delphi内存操作API函数(备查,并一一学习)
Delphi内存操作API函数System.IsMemoryManagerSet;System.Move;System.New;System.ReallocMem;System.ReallocMemo ...
随机推荐
- target与currentTarget与this的区别
target与currentTarget与this的区别: target在事件流的目标阶段:currentTarget在事件的捕获.目标及冒泡阶段. 只有当事件流处在目标阶段的时候,二者的指向才是一致 ...
- oracle存储过程---创建存储过程语句
一.创建存储过程语句 语法: CREATE OR REPLACE PROCEDURE testname( argument1 TYPE1, .... ) AS BEGIN ...... END ...
- vue 学习笔记—axios(替代vue-resource)
一.使用 1. 引入CDN的方式 https://unpkg.com/axios@0.16.2/dist/axios.min.js 或者 npm方式 npm install axios --sa ...
- Javascript - ExtJs - Toolbar - 工具栏
Toolbar组件 创建工具栏 Toolbar类是一种子组件,它不能独立存在,需要依附在其它组件上面.很多容器组件都具备tbar(顶部工具栏).bbar(底部工具栏)的配置,所以可以像下面那样使用它. ...
- Redis安装完后redis-cli无法使用(redis-cli: command not found)
之前安装redis后客户端无法使用,即redis-cli执行后报找不到的错误.这主要是安装redis的时候没有把客户端装上,在StackOverFlow上找到了一种只安装redis cli的方法,这里 ...
- 在Linux环境下使用Apache部署ASP.NET Core
在前几篇文章中我们一起探讨了如何在Linux环境中安装ASP.NET Core运行时环境及将ASP.NET Core项目部署在Jexus中,这篇文章中我们将探讨如何将ASP.NET Core部署于Ap ...
- 【转】python模块分析之logging日志(四)
[转]python模块分析之logging日志(四) python的logging模块是用来写日志的,是python的标准模块. 系列文章 python模块分析之random(一) python模块分 ...
- MySQL主从复制故障1595报错【原创】
服务器环境 架构图 架构搭成后,在B机器上发现主从报错Last_IO_Errno: 1595 Last_IO_Error: Relay log write failure: could not que ...
- Android-创建一个简单的用户接口-(补day2内容)
如果按照之前的布局设置,那么输入框和按钮组件的大小就会是刚好满足它们的内容的.如图1. 图1.输入框和按钮宽度设置为”wrap_content” 这样的设置是可以满足按钮的,但不能满足输入框的要求,因 ...
- T-SQL DISTINCT子句 去重复
语法 以下是DISTINCT关键字的基本语法,用于删除重复记录. SELECT DISTINCT column1, column2,.....columnN FROM table_name WHERE ...