bin 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. .TH BIN 2
  2. .SH NAME
  3. binalloc, bingrow, binfree \- grouped memory allocation
  4. .SH SYNOPSIS
  5. .B #include <u.h>
  6. .br
  7. .B #include <libc.h>
  8. .br
  9. .B #include <bin.h>
  10. .PP
  11. .ta \w'\fLvoid* 'u
  12. .PP
  13. .B
  14. typedef struct Bin Bin;
  15. .PP
  16. .B
  17. void *binalloc(Bin **bp, ulong size, int clr);
  18. .PP
  19. .B
  20. void *bingrow(Bin **bp, void *op, ulong osize,
  21. .br
  22. .B
  23. ulong size, int clr);
  24. .PP
  25. .B
  26. void binfree(Bin **bp);
  27. .SH DESCRIPTION
  28. These routines provide simple grouped memory allocation and deallocation.
  29. Items allocated with
  30. .I binalloc
  31. are added to the
  32. .I Bin
  33. pointed to by
  34. .IR bp .
  35. All items in a bin may be freed with one call to
  36. .IR binfree ;
  37. there is no way to free a single item.
  38. .PP
  39. .I Binalloc
  40. returns a pointer to a new block of at least
  41. .I size
  42. bytes.
  43. The block is suitably aligned for storage of any type of object.
  44. No two active pointers from
  45. .I binalloc
  46. will have the same value.
  47. The call
  48. .B binalloc(0)
  49. returns a valid pointer rather than null.
  50. If
  51. .I clr
  52. is non-zero, the allocated memory is set to 0;
  53. otherwise, the contents are undefined.
  54. .PP
  55. .I Bingrow
  56. is used to extend the size of a block of memory returned by
  57. .IR binalloc .
  58. .I Bp
  59. must point to the same bin group used to allocate the original block,
  60. and
  61. .I osize
  62. must be the last size used to allocate or grow the block.
  63. A pointer to a block of at least
  64. .I size
  65. bytes is returned, with the same contents in the first
  66. .I osize
  67. locations.
  68. If
  69. .I clr
  70. is non-zero, the remaining bytes are set to 0,
  71. and are undefined otherwise.
  72. If
  73. .I op
  74. is
  75. .BR nil ,
  76. it and
  77. .I osize
  78. are ignored, and the result is the same as calling
  79. .IR binalloc .
  80. .PP
  81. .I Binalloc
  82. and
  83. .I bingrow
  84. allocate large chunks of memory using
  85. .IR malloc (2)
  86. and return pieces of these chunks.
  87. The chunks are
  88. .IR free 'd
  89. upon a call to
  90. .IR binfree .
  91. .SH SOURCE
  92. .B /sys/src/libbin
  93. .SH SEE ALSO
  94. .IR malloc (2)
  95. .SH DIAGNOSTICS
  96. .I binalloc
  97. and
  98. .I bingrow
  99. return 0 if there is no available memory.