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...
公共语言运行时 (CLR) 和基类库 (BCL) 的改进 性能改进,包括更好的多核心支持、后台垃圾回收和服务器上的探查器附加。 新的内存映射文件和数字类型。 更轻松的调试,包括转储调试、Watson 小型转储、64 位的混合...
作者在网络版CFAQ列表的基础上进行了大幅度的扩充和丰富,结合代码示例,权威而且详细深入地解答了实际学习和工作中最常遇到的495个C语言问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预处理器等...
u-boot运行到第2阶段会进入start_armboot()函数。其中nand_init()函数是对nand flash的最 初初始化函数。nand_init()函数在两个文件中实现。其调用与 CFG_NAND_LEGACY 宏有 关,如果没有定义这个宏,系统调用 ...
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 ...
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 ...
.NET Framework 是由 Microsoft 开发的一种全面且一致的编程模型,用于生成具有视觉震撼力的用户体验、无缝的安全通信和对一系列业务流程进行建模的能力的应用程序。 .NET Framework 4 将与旧的 Framework 版本并行...
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 ...
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 ...
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 ...
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 ...
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 ...
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 ...
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 ...
2.4.2 在Nios系统上运行软件.......................................................................................34 第三章 Nios CPU结构....................................................................