`

《Windows核心编程》---C运行库的内存对齐函数

 
阅读更多

C运行库提供了一系列函数用于分配对齐过的内存:

1_aligned_malloc函数的功能是分配一块对齐过的内存:

void * _aligned_malloc(

size_t size, //要分配的字节数

size_t alignment //要对齐到的字节边界,传给alignment的值必须是2的整数幂次方

);

2_aligned_offset_malloc函数用于在指定的内存对齐边界上分配内存:

void * _aligned_offset_malloc(

size_t size, //要分配的字节数

size_t alignment, //要对齐到的字节边界,传给alignment的值必须是2的整数幂次方

size_t offset //为达到内存对齐所指定的偏移量

);

3_aligned_realloc函数和_aligned_offset_realloc函数用于改变由_aligned_malloc或者_aligned_offset_malloc分配的内存的大小:

void * _aligned_realloc(

void *memblock, //要改变大小的内存地址

size_t size, //新分配的字节数

size_t alignment //要对齐到的字节边界,传给alignment的值必须是2的整数幂次方

);

void * _aligned_offset_realloc(

void *memblock,

size_t size,

size_t alignment,

size_t offset

);

4_aligned_free函数用于释放由上述函数申请的内存资源:

void _aligned_free (

void *memblock

);

实例代码如下:

#include <iostream>

#include <malloc.h>

#include <stdio.h>

using namespace std;

int main()

{

void *ptr;

size_t alignment;

size_t offset;

//注意alignment必须是2的整数幂次方

alignment = 16;

offset = 5;

//使用_aligned_malloc

ptr = _aligned_malloc(100, alignment);

if(ptr == NULL)

{

printf_s("Error allocation aligned memory/n");

return -1;

}

if(((int)ptr % alignment) == 0)

{

printf_s("This pointer, %d, is aligned on %d/n",

ptr, alignment);

}

else

{

printf_s("This pointer, %d, is not aligned on %d/n",

ptr, alignment);

}

//使用_aligned_realloc

ptr = _aligned_realloc(ptr, 200, alignment);

if(((int)ptr % alignment) == 0)

{

printf_s("This pointer, %d, is aligned on %d/n",

ptr, alignment);

}

else

{

printf_s("This pointer, %d, is not aligned on %d/n",

ptr, alignment);

}

//释放

_aligned_free(ptr);

//使用_aligned_offset_malloc

ptr = _aligned_offset_malloc(200, alignment, offset);

if(ptr == NULL)

{

printf_s("Error allocation aligned offset memory/n");

return -1;

}

if((((int)ptr + offset) % alignment) == 0)

{

printf_s("This pointer, %d, is offset by %d on alignment of %d/n",

ptr, offset, alignment);

}

else

{

printf_s("This pointer, %d, does not satisfy offset %d and alignment %d/n",

ptr, offset, alignment);

}

//使用_aligned_offset_realloc

ptr = _aligned_offset_realloc(ptr, 200, alignment, offset);

if(ptr == NULL)

{

printf_s("Error reallocation aligned offset memory/n");

return -1;

}

if((((int)ptr + offset) % alignment) == 0)

{

printf_s("This pointer, %d, is offset by %d on alignment of %d/n",

ptr, offset, alignment);

}

else

{

printf_s("This pointer, %d, does not satisfy offset %d and alignment %d/n",

ptr, offset, alignment);

}

//_aligned_free同时与_aligned_malloc_aligned_realloc配合使用

_aligned_free(ptr);

system("pause");

return 0;

}

分享到:
评论

相关推荐

    易语言程序免安装版下载

     支持静态链接其它编程语言(如C/C++、汇编等)编译生成的静态库(.LIB或.OBJ),但仅限于COFF格式,支持cdecl和stdcall两种函数调用约定。  使用说明如下:函数声明和调用方法与DLL命令一致;“库文件名”以.lib...

    framword4.5

    公共语言运行时 (CLR) 和基类库 (BCL) 的改进 性能改进,包括更好的多核心支持、后台垃圾回收和服务器上的探查器附加。 新的内存映射文件和数字类型。 更轻松的调试,包括转储调试、Watson 小型转储、64 位的混合...

    你必须知道的495个C语言问题.pdf

    作者在网络版CFAQ列表的基础上进行了大幅度的扩充和丰富,结合代码示例,权威而且详细深入地解答了实际学习和工作中最常遇到的495个C语言问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预处理器等...

    uboott移植实验手册及技术文档

    u-boot运行到第2阶段会进入start_armboot()函数。其中nand_init()函数是对nand flash的最 初初始化函数。nand_init()函数在两个文件中实现。其调用与 CFG_NAND_LEGACY 宏有 关,如果没有定义这个宏,系统调用 ...

    Visual C++音频视频处理技术及工程实践(含源码2/2)

    13.3 用C语言进行视频算法框架编程 492 13.3.1 C编程规则和参考 492 13.3.2 DSP关键字与CMD文件使用 493 13.3.3 算法系统资源剖析 495 13.4 DM642实现视频算法优化 497 13.4.1 并行算法指令和建立软件流水 497 ...

    Visual C++音频/视频处理技术及工程实践(分卷2)

    13.3 用C语言进行视频算法框架编程 492 13.3.1 C编程规则和参考 492 13.3.2 DSP关键字与CMD文件使用 493 13.3.3 算法系统资源剖析 495 13.4 DM642实现视频算法优化 497 13.4.1 并行算法指令和建立软件流水 497 ...

    Microsoft .NET Framework 4

    .NET Framework 是由 Microsoft 开发的一种全面且一致的编程模型,用于生成具有视觉震撼力的用户体验、无缝的安全通信和对一系列业务流程进行建模的能力的应用程序。 .NET Framework 4 将与旧的 Framework 版本并行...

    Visual C++音频视频处理技术及工程实践(分卷0)

    13.3 用C语言进行视频算法框架编程 492 13.3.1 C编程规则和参考 492 13.3.2 DSP关键字与CMD文件使用 493 13.3.3 算法系统资源剖析 495 13.4 DM642实现视频算法优化 497 13.4.1 并行算法指令和建立软件流水 497 ...

    Visual C++音频/视频处理技术及工程实践 (分卷1)

    13.3 用C语言进行视频算法框架编程 492 13.3.1 C编程规则和参考 492 13.3.2 DSP关键字与CMD文件使用 493 13.3.3 算法系统资源剖析 495 13.4 DM642实现视频算法优化 497 13.4.1 并行算法指令和建立软件流水 497 ...

    Visual C++ 音频/视频 处理技术及工程实践(分卷3)

    13.3 用C语言进行视频算法框架编程 492 13.3.1 C编程规则和参考 492 13.3.2 DSP关键字与CMD文件使用 493 13.3.3 算法系统资源剖析 495 13.4 DM642实现视频算法优化 497 13.4.1 并行算法指令和建立软件流水 497 ...

    Visual C++音频视频处理技术及工程实践(分卷9)

    13.3 用C语言进行视频算法框架编程 492 13.3.1 C编程规则和参考 492 13.3.2 DSP关键字与CMD文件使用 493 13.3.3 算法系统资源剖析 495 13.4 DM642实现视频算法优化 497 13.4.1 并行算法指令和建立软件流水 497 ...

    Visual C++音频视频处理技术及工程实践(分卷7)

    13.3 用C语言进行视频算法框架编程 492 13.3.1 C编程规则和参考 492 13.3.2 DSP关键字与CMD文件使用 493 13.3.3 算法系统资源剖析 495 13.4 DM642实现视频算法优化 497 13.4.1 并行算法指令和建立软件流水 497 ...

    Visual C++音频视频处理技术及工程实践(分卷6)

    13.3 用C语言进行视频算法框架编程 492 13.3.1 C编程规则和参考 492 13.3.2 DSP关键字与CMD文件使用 493 13.3.3 算法系统资源剖析 495 13.4 DM642实现视频算法优化 497 13.4.1 并行算法指令和建立软件流水 497 ...

    Visual C++音频视频处理技术及工程实践地址

    13.3 用C语言进行视频算法框架编程 492 13.3.1 C编程规则和参考 492 13.3.2 DSP关键字与CMD文件使用 493 13.3.3 算法系统资源剖析 495 13.4 DM642实现视频算法优化 497 13.4.1 并行算法指令和建立软件流水 497 ...

    复旦nois教材01.rar

    2.4.2 在Nios系统上运行软件.......................................................................................34 第三章 Nios CPU结构....................................................................

Global site tag (gtag.js) - Google Analytics