���� ����� ����������� ������� malloc(), �������� ������� �����
��������� ���:
void *malloc(size_t size);
�������� ���� void* � ���, ��� ��������� ������� malloc() �����
����������� ��������� ������ ���� ��� ������ �����. ������ ����������� �
���� �������� ��������� ���� ������� ���, ����� ��������� �� ���� ������
����������� �� � ���� ���������� �������, � ����� ���� �� ����������, �
����������� ������� ������� �� ��� ������:
#include <stdlib.h>
int malloc2(void **ptr, size_t size) {
return (*ptr = malloc(size)) == NULL ? 1 : 0;
}
int main() {
char *buf;
malloc2(&buf, 10);
}
������ ��� ���������� ��������� ��������������, ��� ���� char** � void**
������������.
s1# gcc test.c -o test
test.c: In function 'main':
test.c:10: warning: passing argument 1 of 'malloc2' from incompatible
pointer type
��������� ��� void**, � ����� �������� ���� �����:
1. ������� ������������, ��������� ���������, ��� � ��������� ptr
������� ���������� ������������ ���������. ��� ���� �� �����������
������� �� �������� ��������������, ���� ������ ������ ���������
(�������� ���������) � ������� ���������� �������� ��������� (���������
���������).
2. �������� �������������� ����������� ��� �������� � �������
����������� �������� ��������� ��� ������ �����.
���� ���������� ������� � ����:
int malloc2(void *ptr, size_t size) {
return (*(void **)ptr = malloc(size)) == NULL ? 1 : 0;
}
�� ������� �������������� ����������� �� �����. ������. ���� ���� �
������� ���������� ��������� ���������. � �� ��������� �������
���������, ��� ��� ���� ���������� ������ ������� ���������. ���-������
����� ������� ��, ��� � ����?
��� ����� �� ���� ��������� �����: �������� void* � ����� ��� ������
������� ����� �������� ����� ��������� ��� ������, �� ����������� �����
��������� � �������� ��������� ��������� ������ ��������, ��� ��������
void**, �� ����� ��� ������ ������� ����������� ������ ����� �����
������ ����� ���� (void **)? � ��������� ������ ����� �������� � char**,
� uint8_t**, �.�. �������� ������� �� void ��� ��� ����� �� �����.
--
Best regards, Vadim Guchenko [yhw at relost dot net].
�� ������ � All �� Thu, 17 Sep 2009 09:56:08 +0000 (UTC):
[...]
VG> ��������� ��� void**, � ����� �������� ���� �����:
��� � ��, ��������� C99/C++03 �������� ������� ���������� ������ ��� void *.
H� ������ ��� �������� ������������ ��� ��������� ��������.
[...]
VG> ����� ������� ��, ��� � ����?
int malloc2_int(void *p, void **pp, size_t s);
#define malloc2(pp, s) malloc2_int(*(p), (void **)(pp), s)
� �� C++ �������� ����� ������ ��������, �� � ������ �������, ����� ���
������ ��� ������������� C++ - ���� ���������� (�����, ��� ��� �������������
C++ � ���������).
VG> ��� ����� �� ���� ��������� �����: �������� void* � ����� ��� ������
VG> ������� ����� �������� ����� ��������� ��� ������, �� ����������� �����
VG> ��������� � �������� ��������� ��������� ������ ��������, ��� ��������
VG> void**, �� ����� ��� ������ ������� ����������� ������ ����� �����
VG> ������ ����� ���� (void **)? � ��������� ������ ����� �������� �
VG> char**, � uint8_t**, �.�. �������� ������� �� void ��� ��� ����� ��
VG> �����.
������ ��� �� ������, �.�. ���������� void *, �� ����� �� ����������, ��
������ ���������� void **.
--
�������, ������ ��������. E-mail: l...@cryptopro.ru <http://www.cryptopro.ru>
�� ������ � Vadim Guchenko �� Fri, 18 Sep 2009 02:19:56 +0000 (UTC):
[...]
VG>> ����� ������� ��, ��� � ����?
SEL> int malloc2_int(void *p, void **pp, size_t s);
SEL> #define malloc2(pp, s) malloc2_int(*(p), (void **)(pp), s)
�������� �����, �����:
int malloc2_int(void *p, void **pp, size_t s);
#define malloc2(pp, s) malloc2_int(*(pp), (void **)(pp), s)
VG> О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ char** О©╫ void**
VG> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
man cdecl cundecl
"О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫" О©╫ "О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫
чёО©╫О©╫-О©╫О©╫О©╫О©╫О©╫-О©╫О©╫О©╫" -- О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫HО©╫О©╫ О©╫О©╫О©╫О©╫. HО©╫ О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
чёО©╫О©╫-О©╫О©╫О©╫О©╫О©╫-О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫-О©╫О©╫-чёО©╫О©╫-О©╫О©╫О©╫О©╫О©╫-О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫-О©╫О©╫-О©╫О©╫О©╫О©╫О©╫О©╫.
VG>> ������ ��� ���������� ��������� ��������������, ��� ���� char**
VG>> � void** ������������.
KF> man cdecl cundecl
KF> "��������� �� ��������� �� ������" � "��������� �� ���������
KF> �� ޣ��-�����-���" -- �������� ���H�� ����.
KF> H� ������, ��� ������ �� �������� ޣ��-�����-���, � ������, ���
KF> ���������-��-ޣ��-�����-��� �� �������� ����������-��-������.
��� ��� ��������. ��������� �� void ��������� � ����� ������ ����������,
� ��� ����� � ���������� �� ������. ��� ��� ���������� �� ������
�������. ������ �� ����� ������� ��������� �� void �� ��������� �
������� ���������� �� ����� ������ ���? ��� �������, ��� ���� �� ������
�������� ���������� ������� ���� void � �������� �� ��������.
VG>>> ����� ������� ��, ��� � ����?
SEL> �������� �����, �����:
SEL> int malloc2_int(void *p, void **pp, size_t s);
SEL> #define malloc2(pp, s) malloc2_int(*(pp), (void **)(pp), s)
������� �� ����, �������� ��� � ��������. ������ �� ����� ��������
��������� ������� ���� ��� �������� �������� ���������. ��������
������������� ����� �������� void**, � ��� �������.
�� ������ � Kirill Frolov �� Fri, 18 Sep 2009 16:45:16 +0000 (UTC):
VG>>> ������ ��� ���������� ��������� ��������������, ��� ���� char**
VG>>> � void** ������������.
KF>> man cdecl cundecl
KF>> "��������� �� ��������� �� ������" � "��������� �� ���������
KF>> �� ޣ��-�����-���" -- �������� ���H�� ����.
KF>> H� ������, ��� ������ �� �������� ޣ��-�����-���, � ������, ���
KF>> ���������-��-ޣ��-�����-��� �� �������� ����������-��-������.
VG> ��� ��� ��������. ��������� �� void ��������� � ����� ������
VG> ����������, � ��� ����� � ���������� �� ������.
���� ����������� ��������� ��������, �� ��� �������� ������� ����.
H�������, � ��������, ������� ���������� ����� ���������� (�� �������, ��
�����, �� ������, ������� ��������� � �.�.). H������� �� ��� ����������
��������� C99 ��������, ������� � ���� ����������� ������������ �/�� void *
(�������� ��������� ��������� SIGBUS � {char *pchar = pvoid}, ���� ��������
pvoid ����������� ��� char *).
VG> ��� ��� ���������� �� ������ �������.
VG> ������ �� ����� ������� ��������� �� void �� ��������� � �������
VG> ���������� �� ����� ������ ���? ��� �������, ��� ���� �� ������
VG> �������� ���������� ������� ���� void � �������� �� ��������.
� ��� ��� �� ���� �������� ����������� ��� �������� �� ����� �� � �����.
�� ������ � Serguei E. Leontiev �� Fri, 18 Sep 2009 16:51:16 +0000 (UTC):
VG>>>> ����� ������� ��, ��� � ����?
SEL>> �������� �����, �����:
SEL>> int malloc2_int(void *p, void **pp, size_t s);
SEL>> #define malloc2(pp, s) malloc2_int(*(pp), (void **)(pp), s)
VG> ������� �� ����, �������� ��� � ��������. ������ �� ����� ��������
VG> ��������� ������� ���� ��� �������� �������� ���������.
�������� �������, �� �� ���������� � ���� �����, �������������� �
�������������. ���� �� ���� ��������� ����� �������� ����.
int malloc2_impl(void **pp, size_t s);
static inline int malloc2_int(void *p, void **pp, size_t s) {
(void *)p;
return malloc2_impl(pp, s);
}
#define malloc2(pp, s) malloc2_int(*(pp), (void **)(pp), s)
���
int malloc2_int(void **pp, size_t s);
static inline int malloc2_check_type(void *p){
return 1;
}
#define malloc2(pp, s) malloc2_int((malloc2_check_type(*pp), (void **)(pp)),
s)
VG> �������� ������������� ����� �������� void**, � ��� �������.
� ������ POSIX-� � man-�� �� ������� �� ������ �����. ���� �����, �������
���, ��� �� � ������� ���������� void *, ������� � ���� ����� ��� ��
�����(���) ������. � ��, ��������, mmap(). ��� ���� ����� ������ ����
��������, �� ������������� ��������. �ӣ ���� �� �����, malloc(), mman() �
������ ������ ���������� void *. ����������� ���� "(void **)(pp)" - ��� �
������������ ������.
�� ������ � Vadim Guchenko �� Fri, 18 Sep 2009 18:02:55 +0000 (UTC):
SEL> �� ������ � Serguei E. Leontiev �� Fri, 18 Sep 2009 16:51:16 +0000
(UTC):
VG>>>>> ����� ������� ��, ��� � ����?
SEL>>> �������� �����, �����:
SEL>>> int malloc2_int(void *p, void **pp, size_t s);
SEL>>> #define malloc2(pp, s) malloc2_int(*(pp), (void **)(pp), s)
VG>> ������� �� ����, �������� ��� � ��������. ������ �� ����� ��������
VG>> ��������� ������� ���� ��� �������� �������� ���������.
SEL> �������� �������,
� ���� �����, ���� ��� ���� ���������� ������� ���� ��������� C99 ������
����� "����������" ���������� � �������� ���������� �����������, �� �������
���� �� �����.
SEL>>> �������� �����, �����:
SEL>>> int malloc2_int(void *p, void **pp, size_t s);
SEL>>> #define malloc2(pp, s) malloc2_int(*(pp), (void **)(pp), s)
VG>> ������� �� ����, �������� ��� � ��������. ������ �� �����
VG>> �������� ��������� ������� ���� ��� �������� ��������
VG>> ���������.
SEL> �������� �������,
H� ���� ���������� �� ��������.
VG>> ��� ��� ��������. ��������� �� void ��������� � ����� ������
VG>> ����������, � ��� ����� � ���������� �� ������.
SEL> ���� ����������� ��������� ��������, �� ��� �������� �������
SEL> ����.
� ����������. � ���� � ���� ������ ��������� �� ������ (�� �� �������,
�� �� ������� ���� � ������ ������� ������). ��� ��������������
��������� void* � ����� ������ ���������� ������� � ���� �����������
������������ ��������� void* ������������� ��������� type* � ��������
��� ������ �����. ���� �� ������ �������� ��� void** � type**.
SEL> H�������, � ��������, ������� ���������� ����� ���������� (��
SEL> �������, �� �����, �� ������, ������� ��������� � �.�.).
��������� �� ������� �� �� �������������. ���� ���������� near, far �
huge �������� �������������. ��� �������������� ������� ������������� �
������� ������ � ������������. � ��� ���������� ������� ���������
������������� ���� ������ �������, ���� ��� ���������� ������ ����. H�
���� ������������� ��������� ������ ����� ������ ������ ����, �� ��
������ ��� ��������. ����������� ��������� ������ ������� � �������
������ ������, �������������� ��� ��������� ������ ����. � ��� �������
������ ������ ���� �� ��������. � �� ���� ����������� ��������, �����
��������� �� char ����� ���������� �� ��������� �� int �� ���������
������������� ��� ������ ������ ��������. � ���� �������� ���� ��
�������, ��� ������ ���� ���������� � ������� ������ ������ ������ ����
����������, ����� � ������� ��� �� ����� ������ �� �������.
SEL> H������� �� ��� ���������� ��������� C99 ��������, ������� �
SEL> ���� ����������� ������������ �/�� void *
SEL> (�������� ��������� ��������� SIGBUS � {char *pchar = pvoid},
SEL> ���� �������� pvoid ����������� ��� char *).
H� ������ � ������������ ���������� �����������. SIGBUS ��� ��
���������� ��� ��������� � ���������� ������ �� ��������������� ���
�������������� ������. ����� �� ��������������� ��������� �� ����������
������. ��������, ��� ����� �� ���� - ������ �����������. H� ��
��������� � �� ���� �� ������, �.�. ��������� void* ������ ����
��������� ���������� ��������� char* � ����� ��������� ������������� �
������������.
VG>> �������� ������������� ����� �������� void**, � ��� �������.
SEL> � ������ POSIX-� � man-�� �� ������� �� ������ �����. ����
SEL> �����, ������� ���, ��� �� � ������� ���������� void *,
SEL> ������� � ���� ����� ��� �� �����(���) ������. � ��, ��������,
SEL> mmap(). ��� ���� ����� ������ ���� ��������, �� �������������
SEL> ��������. �ӣ ���� �� �����, malloc(), mman() � ������ ������
SEL> ���������� void *.
��� ������ ������ ��� ����������. � ��� ��� � ������� ���� �� �����
������� �������� ������, ����� ������ ������������ � ��������� �������.
������� ������ - posix_memalign():
int
posix_memalign(void **ptr, size_t alignment, size_t size);
SEL> ����������� ���� "(void **)(pp)" - ��� � ������������ ������.
����� �������� ������ ����? ������� ����� ���������� ����� ���������
����� ���� ��������. H� ��� ������� ������. ���� ���� �� ���������, ���
������� ���-�� ������ ���������� ������ �� ������, ����� ���� �������,
������� ����� ������� ��� � ����� ����������. ������� � ����� ������
����� �������� � ����������� ���� void**. ���� ������������, ���
����������� ��������� ����� ����� ������ �������� �������������, ��
����� ����� ������� � ���������� void** ������ ����������� �������� ���:
int *pint;
...
{
void *pvoid;
malloc2(&pvoid, 10);
pint = pvoid;
}
���� ��� ��� ������� � ���� ���������� ��� ������������ �������, ��
������ ������� �������� ��������� ����� ��������� ���:
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <err.h>
#include <errno.h>
int malloc2(void **, size_t);
#define malloc2(ptr, size) ({ \
void *_pvoid; \
int _err; \
\
_err = malloc2(&_pvoid, (size)); \
*(ptr) = _pvoid; \
_err; \
})
int main() {
char buf[] = "Hello";
char *p;
int e;
if ((e = malloc2(&p, sizeof(buf))))
errx(1, "%s", strerror(e));
strcpy(p, buf);
printf("%s\n", p);
return 0;
}
#undef malloc2
int malloc2(void **ptr, size_t size) {
return (*ptr = malloc(size)) ? 0 : errno;
}
� ����� ��� �������� ���������. ����� � ���������� ������ � �����������
� ������������ �� ���������� C, � ������������� ptr � size � �������
����� ���� ���, ��� �������� � ������������ ���������� side effects �
������ �� �������, � ���������� ��������� �����������, ���� ������
�������� ��������� � ������� ����� �������� ���-�� ������. ������
���������� ������ ������� ���� �� � ���, ��� ������������ �������������
���� gcc "Statements and Declarations in Expressions", � � ���, ��� ����
��� ���������� � ���������� ������������ (-O2) gcc ���������� ���, �
������� �� ���� �������� ������������ ������, ��� ���� �� �������
malloc2() �� ������������� �� �������������� ������. �.�. ��������
�������� ������������� ��� � ����� �� ������������� � ���������������
�������������, ��� ����������� ��������� �� ������ ����� ����� ������
�������� �������������.
� �� �� ����� ����� ������� � �������������, ��� ��� ��������� �� ������
����� ���������� �������� �������������, �������� ���:
int *pint;
...
malloc2((void **)&pint, 10);
��� ������ ������� ��������� � �������������� ���������� �������,
������� ���������, ��� ptr �������� ���������� �� ���������, �����������
� void*, � �������� ��� � (void **):
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <err.h>
#include <errno.h>
int malloc2(void **, size_t);
#define malloc2(ptr, size) ({ \
typeof(ptr) _ptr = (ptr); \
void *_pvoid __attribute__((unused)) = *_ptr; \
\
malloc2((void **)_ptr, (size)); \
})
int main() {
char buf[] = "Hello";
char *p;
int e;
if ((e = malloc2(&p, sizeof(buf))))
errx(1, "%s", strerror(e));
strcpy(p, buf);
printf("%s\n", p);
return 0;
}
#undef malloc2
int malloc2(void **ptr, size_t size) {
return (*ptr = malloc(size)) ? 0 : errno;
}
����� ��������� ����� �������������� ������������ � � ����� ������� �
���� �����������. � �� ������ ������ ���� �������.
SEL> � ���� �����, ���� ��� ���� ���������� ������� ���� ���������
SEL> C99 ������ ����� "����������" ���������� � �������� ����������
SEL> �����������, �� ������� ���� �� �����.
����� ���, ��� ��������, � �������� ������ ������������ ������� �� gcc �
���������� ������������ - �������� �����������. � ���� �����-�� ������
"����������" ���������� ������������ ������ ISO C, �� �� ��� ��
��������. ������� ����� �������� ��� ������������ � GNU C, ��� ������� �
��� �� ���� ��������.
Vadim Guchenko -> Serguei E. Leontiev @ О©╫О©╫ 24-О©╫О©╫О©╫-09 16:49 MSD:
VG>>> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
SEL>> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫,
VG> HО©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
VG>>> О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ void О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫
VG>>> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫.
SEL>> О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫
SEL>> О©╫О©╫О©╫О©╫.
...
VG> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ near, far О©╫
VG> huge О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫
...
VG> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫пёО©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫,
О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ OpenCL (О©╫ О©╫О©╫О©╫О©╫О©╫-О©╫О©╫О©╫О©╫О©╫), О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫
POSIX. О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫.
SEL>> О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ POSIX-О©╫ О©╫ man-О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫. О©╫О©╫О©╫О©╫
SEL>> О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ void *,
SEL>> О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫(О©╫О©╫О©╫) О©╫О©╫О©╫О©╫О©╫О©╫. О©╫ О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫,
SEL>> mmap(). О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
SEL>> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. О©╫сё О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫, malloc(), mman() О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫
SEL>> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ void *.
VG> О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫
VG> О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
VG> О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ - posix_memalign():
О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
mmap() О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ posix_memalign() О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
void *malloc2_int(size_t s);
#define malloc2(pp,s) (M2_MAX_ERR >= (*(pp) = malloc2_int(s))?*(pp)-M2_BASE_ERR:(ptrdiff_t)0)
О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ mmap() О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫,
О©╫.О©╫. О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫ О©╫О©╫оёО©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫
О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
VG> О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫? О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
VG> О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. HО©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫. О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫
VG> О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫-О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫,
VG> О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫
VG> О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ void**. О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫
VG> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫
VG> О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ void** О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫:
VG> int *pint;
VG> ...
VG> {
VG> void *pvoid;
VG> malloc2(&pvoid, 10);
VG> pint = pvoid;
VG> }
О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ - О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫ О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫
О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫:
struct retval r = malloc2x2(10, 33);
pint1 = r.pv1;
pint2 = r.pv2;
VG> О©╫О©╫О©╫О©╫ gcc "Statements and Declarations in Expressions", О©╫ О©╫ О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫
VG> О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ (-O2) gcc О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫,
...
VG> О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ gcc О©╫
VG> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ - О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫-О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫
VG> "О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫" О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ ISO C, О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫
VG> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ GNU C, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫
VG> О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
О©╫О©╫. О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ жёО©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫.О©╫. О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫ "feature" О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ (О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫) О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫.
О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ ISO C О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ "feature", О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
ISO C++ (О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
О©╫О©╫, О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫). О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫.
P.S.
О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫? О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ "-O2" О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫?
--
О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. E-mail: l...@CryptoPro.ru <http://www.cryptopro.ru>
SEL> ����� ����, ���� ���� ����� �������������, �� ����� �������� �
SEL> ISO C � ��������� �������� ����������, � ���� ����� "feature",
SEL> �� ������������
SEL> ISO C++ (��� �� ��� �������� ���� � �� �������� ��, � ���� �� �
SEL> �������� ��, �� ���������� �� ����������� ��������). � ���
SEL> �����.
����� ���������� ��� � � �++ �� �� ��������������?
Vadim Guchenko -> Serguei E. Leontiev @ О©╫О©╫ 25-О©╫О©╫О©╫-09 14:55 MSD:
SEL>> О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫
SEL>> ISO C О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ "feature",
SEL>> О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
SEL>> ISO C++ (О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫
SEL>> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫, О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫). О©╫ О©╫О©╫О©╫
SEL>> О©╫О©╫О©╫О©╫О©╫.
VG> О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫ О©╫ О©╫++ О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫?
О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫?
О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫, О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ Sun Studio О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ (О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ - О©╫О©╫
О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫?). О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ Intel О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. HО©╫О©╫О©╫О©╫ О©╫щё О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫/JIT
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ - llvm, О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ (О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫), О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ - О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫О©╫, О©╫сё О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫.
О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ "О©╫О©╫О©╫О©╫О©╫О©╫О©╫"
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.