posix_memalign

Autres langues

Langue: ja

Version: 2003-08-22 (openSuse - 09/10/07)

Section: 3 (Bibliothèques de fonctions)

̾Á°

posix_memalign, memalign, valloc - ¥¢¥é¥¤¥ó¥á¥ó¥È¤µ¤ì¤¿¥á¥â¥ê¤Î³ä¤êÅö¤Æ¤ò¹Ô¤¦

½ñ¼°


#define _XOPEN_SOURCE 600

#include <stdlib.h>



int posix_memalign(void **memptr, size_t alignment, size_t size);



#include <malloc.h>



void *valloc(size_t size);

void *memalign(size_t boundary, size_t size);

ÀâÌÀ

´Ø¿ô posix_memalign() ¤Ï size ¥Ð¥¤¥È¤Î¥á¥â¥ê¤ò³ä¤êÅö¤Æ¡¢³ä¤êÅö¤Æ¤é¤ì¤¿¥á¥â¥ê¤Î¥¢¥É¥ì¥¹¤ò *memptr ¤ËÀßÄꤹ¤ë¡£ ³ä¤êÅö¤Æ¤é¤ì¤¿¥á¥â¥ê¤Î¥¢¥É¥ì¥¹¤Ï alignment ¤ÎÇÜ¿ô¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤Ï¤º¤Ç¤¢¤ë¡£ alignment ¤Ï 2 ¤Î¤Ù¤­¾è¤Ç¡¢¤«¤Ä sizeof(void *) ¤ÎÇÜ¿ô¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£

Çѻߤµ¤ì¤¿´Ø¿ô¤Ç¤¢¤ë memalign() ¤Ï¡¢ size ¥Ð¥¤¥È¤Î¥á¥â¥ê¤ò³ä¤êÅö¤Æ¡¢³ä¤êÅö¤Æ¤é¤ì¤¿¥á¥â¥ê¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£ ¥á¥â¥ê¤Î¥¢¥É¥ì¥¹¤Ï boundary ¤ÎÇÜ¿ô¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤Ï¤º¤Ç¤¢¤ë¡£ boundary ¤Ï 2 ¤Î¤Ù¤­¾è¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£

Çѻߤµ¤ì¤¿´Ø¿ô¤Ç¤¢¤ë valloc() ¤Ï size ¥Ð¥¤¥È¤Î¥á¥â¥ê¤ò³ä¤êÅö¤Æ¡¢³ä¤êÅö¤Æ¤é¤ì¤¿¥á¥â¥ê¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£ ¥á¥â¥ê¤Î¥¢¥É¥ì¥¹¤Ï¥Ú¡¼¥¸¥µ¥¤¥º¤ÎÇÜ¿ô¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤Ï¤º¤Ç¤¢¤ë¡£ ¤³¤ì¤Ï memalign(sysconf(_SC_PAGESIZE),size) ¤ÈÅù²Á¤Ç¤¢¤ë¡£

3 ¤Ä¤Î´Ø¿ô¤Ï¤¤¤º¤ì¤â¥á¥â¥ê¤Î¥¼¥í¥¯¥ê¥¢¤ò¹Ô¤ï¤Ê¤¤¡£

ÊÖ¤êÃÍ

memalign() ¤È valloc() ¤Ï³ä¤êÅö¤Æ¤é¤ì¤¿¥á¥â¥ê¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£ ³ä¤êÅö¤Æ¤Ë¼ºÇÔ¤·¤¿¾ì¹ç¤Ï NULL ¤òÊÖ¤¹¡£

posix_memalign() ¤ÏÀ®¸ù¤·¤¿¾ì¹ç¤Ï 0 ¤òÊÖ¤·¡¢ ¼ºÇÔ¤·¤¿¾ì¹ç¤Ï¼¡¤Î¥»¥¯¥·¥ç¥ó¤Ëµ­ºÜ¤µ¤ì¤¿¥¨¥é¡¼ÃͤΤ¤¤º¤ì¤«¤òÊÖ¤¹¡£ errno ¤Ï¥»¥Ã¥È¤µ¤ì¤Ê¤¤¤³¤È¤ËÃí°Õ¤¹¤ë¤³¤È¡£

¥¨¥é¡¼

EINVAL
alignment ¥Ñ¥é¥á¡¼¥¿¤¬ 2 ¤Î¤Ù¤­¾è¤Ç¤Ê¤«¤Ã¤¿¤«¡¢ sizeof(void *) ¤ÎÇÜ¿ô¤Ç¤Ê¤«¤Ã¤¿¡£
ENOMEM
³ä¤êÅö¤ÆÍ×µá¤òËþ¤¿¤¹¤Î¤Ë½½Ê¬¤Ê¥á¥â¥ê¤¬¤Ê¤«¤Ã¤¿¡£

¥Ð¡¼¥¸¥ç¥ó

memalign() ¤È valloc() ¤Ï¤¹¤Ù¤Æ¤Î Linux libc ¥é¥¤¥Ö¥é¥ê¤Ç»ÈÍѲÄǽ¤Ç¤¢¤ë¡£ posix_memalign() ¤Ï glibc 2.1.91 °Ê¹ß¤Ç»ÈÍѲÄǽ¤Ç¤¢¤ë¡£

½àµò

´Ø¿ô valloc() ¤Ï 3.0BSD ¤ÇÅо줷¤¿¡£4.3BSD ¤Ç¤ÏÇѻߤµ¤ì¤¿¤Èµ­ºÜ¤µ¤ì¤Æ¤ª¤ê¡¢ SUSv2 ¤Ç¤Ï²áµî¤Î¤â¤Î¤À¤Èµ­ºÜ¤µ¤ì¤Æ¤¤¤ë¡£ POSIX.1-2001 ¤Ë¤Ï¤â¤Ï¤ä¸ºß¤·¤Ê¤¤¡£ ´Ø¿ô memalign() ¤Ï SunOS 4.1.3 ¤ÇÅо줷¤¿¤¬¡¢4.4BSD ¤Ë¤Ï¤Ê¤¤¡£ ´Ø¿ô posix_memalign() ¤Ï POSIX.1d ¤ËͳÍ褹¤ë¡£

¥Ø¥Ã¥À

posix_memalign() ¤ÎÀë¸À¤ò <stdlib.h> ¤Ç¹Ô¤¦¤³¤È¤Ë´Ø¤·¤Æ¤Ï¡¢³§¤Î°Õ¸«¤¬°ìÃפ·¤Æ¤¤¤ë¡£ ¤³¤Î´Ø¿ô¤òÀë¸À¤¹¤ë¤Ë¤Ï¡¢ glibc ¤Ç¤Ï _GNU_SOURCE ¤òÄêµÁ¤¹¤ë¡¢¤Þ¤¿¤Ï _XOPEN_SOURCE ¤ò 600 ¤è¤ê¾®¤µ¤¯¤Ê¤¤ÃͤËÄêµÁ¤¹¤ë¡¢¤Î¤¤¤º¤ì¤«¤ò¹Ô¤¦ ɬÍפ¬¤¢¤ë¡£

¤¤¤¯¤Ä¤«¤Î¥·¥¹¥Æ¥à¤Ç¤Ï¡¢ memalign() ¤Ï <malloc.h> ¤Ç¤Ï¤Ê¤¯ <stdlib.h> ¤ÇÀë¸À¤µ¤ì¤Æ¤¤¤ë¡£

SUSv2 ¤Ë¤è¤ë¤È¡¢ valloc() ¤Ï <stdlib.h> ¤ÇÀë¸À¤µ¤ì¤ë¡£ libc4,5 ¤ä glibc ¤Ç¤Ï <malloc.h> ¤ÇÀë¸À¤µ¤ì¤Æ¤ª¤ê¡¢ ¤µ¤é¤Ë <stdlib.h> ¤Ç¤âÀë¸À¤µ¤ì¤ë¤³¤È¤â¤¢¤ë (¶ñÂÎŪ¤Ë¤Ï°Ê²¼¤Î¤¤¤º¤ì¤«¤Î¾ì¹ç: _GNU_SOURCE ¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤ë¡¢_BSD_SOURCE ¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤ë¡¢ glibc ¤Ç _XOPEN_SOURCE_EXTENDED ¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤ë¡¢ glibc ¤Ç _XOPEN_SOURCE ¤¬ 500 ¤è¤ê¾®¤µ¤¯¤Ê¤¤ÃͤËÄêµÁ¤µ¤ì¤Æ¤¤¤ë)¡£

Ãí°Õ

¿¤¯¤Î¥·¥¹¥Æ¥à¤Ç¤Ï¡¢¥¢¥é¥¤¥ó¥á¥ó¥È¤Ë´Ø¤·¤ÆÀ©¸Â¤¬¤¢¤ë¡£Î㤨¤Ð¡¢ ¥Ö¥í¥Ã¥¯¥Ç¥Ð¥¤¥¹¤ËÂФ¹¤ë¥À¥¤¥ì¥¯¥È I/O ¤Ë»ÈÍѤ¹¤ë¥Ð¥Ã¥Õ¥¡¤Ë¤Ï ¥¢¥é¥¤¥ó¥á¥ó¥È¤Ë´Ø¤¹¤ëÀ©¸Â¤¬¤¢¤ë¡£ POSIX ¤Ç¤Ï¡¢¤É¤ó¤Ê¥¢¥é¥¤¥ó¥á¥ó¥È¤¬É¬Íפ«¤òÃΤ뤿¤á¤Ë pathconf(path,_PC_REC_XFER_ALIGN) ¥³¡¼¥ë¤òµ¬Äꤷ¤Æ¤¤¤ë¡£¤³¤³¤Ç posix_memalign() ¤ò»È¤¦¤È¡¢¤³¤ÎɬÍ×¾ò·ï¤òËþ¤¿¤¹¤³¤È¤¬¤Ç¤­¤ë¡£

posix_memalign() ¤Ï alignment ¤¬¾å¤Ç¾ÜºÙ¤Ë½Ò¤Ù¤¿É¬Í×¾ò·ï¤òËþ¤¿¤¹¤«¤É¤¦¤«¤ò³Î¤«¤á¤ë¡£ memalign() ¤Ï boundary ¥Ñ¥é¥á¡¼¥¿¤¬Àµ¤·¤¤¤«¤É¤¦¤«¤Î³Îǧ¤ò¹Ô¤ï¤Ê¤¤¤«¤â¤·¤ì¤Ê¤¤¡£

POSIX ¤Ç¤Ï posix_memalign() ¤Ë¤è¤Ã¤Æ³ÍÆÀ¤·¤¿¥á¥â¥ê¤Ï free(3) ¤ò»È¤Ã¤Æ²òÊü¤¹¤ë¤³¤È¤¬¤Ç¤­¤ëɬÍפ¬¤¢¤ë¡£ ¤¤¤¯¤Ä¤«¤Î¥·¥¹¥Æ¥à¤Ç¤Ï memalign() ¤ä valloc() ¤Ç³ä¤êÅö¤Æ¤é¤ì¤¿¥á¥â¥ê¤òºÆÍøÍѤ¹¤ë¼êÃʤ¬Ä󶡤µ¤ì¤Æ¤¤¤Ê¤¤¡£ (¤Ê¤¼¤Ê¤é free(3) ¤ËÅϤ¹¤³¤È¤¬¤Ç¤­¤ë¤Î¤Ï malloc(3) ¤«¤é¼õ¤±¼è¤Ã¤¿¥Ý¥¤¥ó¥¿¤À¤±¤À¤¬¡¢ Î㤨¤Ð memalign() ¤Ï malloc(3) ¤ò¸Æ¤Ó½Ð¤·¡¢ÆÀ¤¿Ãͤò¥¢¥é¥¤¥ó¥á¥ó¥È¤·¤Æ¤·¤Þ¤¦¤«¤é¤Ç¤¢¤ë) GNU libc ¤Ç¤Ï ¤³¤³¤Ë½Ò¤Ù¤¿ 3 ¤Ä¤Î´Ø¿ô¤Î¤¤¤º¤ì¤Ç³ÍÆÀ¤·¤¿¥á¥â¥ê¤â free(3) ¤ÇºÆÍøÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£

GNU libc ¤Î malloc(3) ¤Ï¾ï¤Ë 8 ¥Ð¥¤¥È¤Ë¥¢¥é¥¤¥ó¥á¥ó¥È¤µ¤ì¤¿¥á¥â¥ê¥¢¥É¥ì¥¹¤òÊÖ¤¹¤Î¤Ç¡¢ ¤³¤³¤Ç½Ò¤Ù¤¿´Ø¿ô¤¬É¬Íפˤʤë¤Î¤Ï 8 ¥Ð¥¤¥È¤è¤ê¤âÂ礭¤Ê¥¢¥é¥¤¥ó¥á¥ó¥È¤¬É¬Íפʾì¹ç¤À¤±¤Ç¤¢¤ë¡£

´ØÏ¢¹àÌÜ

brk(2), getpagesize(2), free(3), malloc(3), feature_test_macros(7)