# SOME DESCRIPTIVE TITLE. # Copyright (C) 2001-2022, Python Software Foundation # This file is distributed under the same license as the Python package. # FIRST AUTHOR , YEAR. # # Translators: # Rafael Fontenelle , 2022 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: Python 3.10\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-12-30 14:59+0000\n" "PO-Revision-Date: 2022-11-05 17:21+0000\n" "Last-Translator: Rafael Fontenelle , 2022\n" "Language-Team: Japanese (https://www.transifex.com/python-doc/teams/5390/" "ja/)\n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: ../../c-api/memory.rst:8 msgid "Memory Management" msgstr "メモリ管理" #: ../../c-api/memory.rst:17 msgid "Overview" msgstr "概要" #: ../../c-api/memory.rst:19 msgid "" "Memory management in Python involves a private heap containing all Python " "objects and data structures. The management of this private heap is ensured " "internally by the *Python memory manager*. The Python memory manager has " "different components which deal with various dynamic storage management " "aspects, like sharing, segmentation, preallocation or caching." msgstr "" "Python におけるメモリ管理には、全ての Python オブジェクトとデータ構造が入った" "プライベートヒープ (private heap) が必須です。プライベートヒープの管理は、内" "部的には *Python メモリマネージャ (Python memory manager)* が確実に行います。" "Python メモリマネージャには、共有 (sharing)、セグメント分割 (segmentation)、" "事前割り当て (preallocation)、キャッシュ化 (caching) といった、様々な動的記憶" "管理の側面を扱うために、個別のコンポーネントがあります。" #: ../../c-api/memory.rst:25 msgid "" "At the lowest level, a raw memory allocator ensures that there is enough " "room in the private heap for storing all Python-related data by interacting " "with the memory manager of the operating system. On top of the raw memory " "allocator, several object-specific allocators operate on the same heap and " "implement distinct memory management policies adapted to the peculiarities " "of every object type. For example, integer objects are managed differently " "within the heap than strings, tuples or dictionaries because integers imply " "different storage requirements and speed/space tradeoffs. The Python memory " "manager thus delegates some of the work to the object-specific allocators, " "but ensures that the latter operate within the bounds of the private heap." msgstr "" "最低水準層では、素のメモリ操作関数 (raw memory allocator) がオペレーティング" "システムのメモリ管理機構とやりとりして、プライベートヒープ内にPython 関連の全" "てのデータを記憶するのに十分な空きがあるかどうか確認します。素のメモリ操作関" "数の上には、いくつかのオブジェクト固有のメモリ操作関数があります。これらは同" "じヒープを操作し、各オブジェクト型固有の事情に合ったメモリ管理ポリシを実装し" "ています。例えば、整数オブジェクトは文字列やタプル、辞書とは違ったやり方で" "ヒープ内で管理されます。というのも、整数には値を記憶する上で特別な要件があ" "り、速度/容量のトレードオフが存在するからです。このように、Python メモリマネ" "ジャは作業のいくつかをオブジェクト固有のメモリ操作関数に委譲しますが、これら" "の関数がプライベートヒープからはみ出してメモリ管理を行わないようにしていま" "す。" #: ../../c-api/memory.rst:36 msgid "" "It is important to understand that the management of the Python heap is " "performed by the interpreter itself and that the user has no control over " "it, even if they regularly manipulate object pointers to memory blocks " "inside that heap. The allocation of heap space for Python objects and other " "internal buffers is performed on demand by the Python memory manager through " "the Python/C API functions listed in this document." msgstr "" "重要なのは、たとえユーザがいつもヒープ内のメモリブロックを指すようなオブジェ" "クトポインタを操作しているとしても、Python 用ヒープの管理はインタプリタ自体が" "行うもので、ユーザがそれを制御する余地はないと理解することです。Python オブ" "ジェクトや内部使用されるバッファを入れるためのヒープ空間のメモリ確保は、必要" "に応じて、Python メモリマネージャがこのドキュメント内で列挙しているPython/C " "API 関数群を介して行います。" #: ../../c-api/memory.rst:49 msgid "" "To avoid memory corruption, extension writers should never try to operate on " "Python objects with the functions exported by the C library: :c:func:" "`malloc`, :c:func:`calloc`, :c:func:`realloc` and :c:func:`free`. This will " "result in mixed calls between the C allocator and the Python memory manager " "with fatal consequences, because they implement different algorithms and " "operate on different heaps. However, one may safely allocate and release " "memory blocks with the C library allocator for individual purposes, as shown " "in the following example::" msgstr "" "メモリ管理の崩壊を避けるため、拡張モジュールの作者は決して Python オブジェク" "トを C ライブラリが公開している関数: :c:func:`malloc` 、 :c:func:" "`calloc` 、 :c:func:`realloc` および :c:func:`free` で操作しようとしてはなり" "ません。こうした関数を使うと、C のメモリ操作関数と Python メモリマネージャと" "の間で関数呼び出しが交錯します。 C のメモリ操作関数とPython メモリマネージャ" "は異なるアルゴリズムで実装されていて、異なるヒープを操作するため、呼び出しの" "交錯は致命的な結果を招きます。とはいえ、個別の目的のためなら、 C ライブラリの" "メモリ操作関数を使って安全にメモリを確保したり解放したりできます。例えば、以" "下がそのような例です::" #: ../../c-api/memory.rst:68 msgid "" "In this example, the memory request for the I/O buffer is handled by the C " "library allocator. The Python memory manager is involved only in the " "allocation of the bytes object returned as a result." msgstr "" "この例では、I/O バッファに対するメモリ要求は C ライブラリのメモリ操作関数を" "使っています。Python メモリマネージャーは戻り値として返される bytes オブジェ" "クトを確保する時にだけ必要です。" #: ../../c-api/memory.rst:72 msgid "" "In most situations, however, it is recommended to allocate memory from the " "Python heap specifically because the latter is under control of the Python " "memory manager. For example, this is required when the interpreter is " "extended with new object types written in C. Another reason for using the " "Python heap is the desire to *inform* the Python memory manager about the " "memory needs of the extension module. Even when the requested memory is used " "exclusively for internal, highly specific purposes, delegating all memory " "requests to the Python memory manager causes the interpreter to have a more " "accurate image of its memory footprint as a whole. Consequently, under " "certain circumstances, the Python memory manager may or may not trigger " "appropriate actions, like garbage collection, memory compaction or other " "preventive procedures. Note that by using the C library allocator as shown " "in the previous example, the allocated memory for the I/O buffer escapes " "completely the Python memory manager." msgstr "" "とはいえ、ほとんどの状況では、メモリの操作は Python ヒープに固定して行うよう" "勧めます。なぜなら、Python ヒープは Python メモリマネジャの管理下にあるからで" "す。例えば、インタプリタを C で書かれた新たなオブジェクト型で拡張する際には、" "ヒープでのメモリ管理が必要です。Python ヒープを使った方がよいもう一つの理由と" "して、拡張モジュールが必要としているメモリについて Python メモリマネージャに " "*情報を提供* してほしいということがあります。たとえ必要なメモリが内部的かつ非" "常に特化した用途に対して排他的に用いられるものだとしても、全てのメモリ操作要" "求を Python メモリマネージャに委譲すれば、インタプリタはより正確なメモリフッ" "トプリントの全体像を把握できます。その結果、特定の状況では、Python メモリマ" "ネージャがガベージコレクションやメモリのコンパクト化、その他何らかの予防措置" "といった、適切な動作をトリガできることがあります。上の例で示したように C ライ" "ブラリのメモリ操作関数を使うと、I/O バッファ用に確保したメモリは Python メモ" "リマネージャの管理から完全に外れることに注意してください。" #: ../../c-api/memory.rst:88 msgid "" "The :envvar:`PYTHONMALLOC` environment variable can be used to configure the " "memory allocators used by Python." msgstr "" "環境変数 :envvar:`PYTHONMALLOC` を使用して Python が利用するメモリアロケータ" "を制御することができます。" #: ../../c-api/memory.rst:91 msgid "" "The :envvar:`PYTHONMALLOCSTATS` environment variable can be used to print " "statistics of the :ref:`pymalloc memory allocator ` every time a " "new pymalloc object arena is created, and on shutdown." msgstr "" "環境変数 :envvar:`PYTHONMALLOCSTATS` を使用して、新たなオブジェクトアリーナが" "生成される時と、シャットダウン時に :ref:`pymalloc メモリアロケータ " "` の統計情報を表示できます。" #: ../../c-api/memory.rst:96 msgid "Allocator Domains" msgstr "" #: ../../c-api/memory.rst:100 msgid "" "All allocating functions belong to one of three different \"domains\" (see " "also :c:type:`PyMemAllocatorDomain`). These domains represent different " "allocation strategies and are optimized for different purposes. The specific " "details on how every domain allocates memory or what internal functions each " "domain calls is considered an implementation detail, but for debugging " "purposes a simplified table can be found at :ref:`here `. There is no hard requirement to use the memory returned by the " "allocation functions belonging to a given domain for only the purposes " "hinted by that domain (although this is the recommended practice). For " "example, one could use the memory returned by :c:func:`PyMem_RawMalloc` for " "allocating Python objects or the memory returned by :c:func:" "`PyObject_Malloc` for allocating memory for buffers." msgstr "" #: ../../c-api/memory.rst:112 msgid "The three allocation domains are:" msgstr "" #: ../../c-api/memory.rst:114 msgid "" "Raw domain: intended for allocating memory for general-purpose memory " "buffers where the allocation *must* go to the system allocator or where the " "allocator can operate without the :term:`GIL`. The memory is requested " "directly to the system." msgstr "" #: ../../c-api/memory.rst:119 msgid "" "\"Mem\" domain: intended for allocating memory for Python buffers and " "general-purpose memory buffers where the allocation must be performed with " "the :term:`GIL` held. The memory is taken from the Python private heap." msgstr "" #: ../../c-api/memory.rst:123 msgid "" "Object domain: intended for allocating memory belonging to Python objects. " "The memory is taken from the Python private heap." msgstr "" #: ../../c-api/memory.rst:126 msgid "" "When freeing memory previously allocated by the allocating functions " "belonging to a given domain,the matching specific deallocating functions " "must be used. For example, :c:func:`PyMem_Free` must be used to free memory " "allocated using :c:func:`PyMem_Malloc`." msgstr "" #: ../../c-api/memory.rst:131 msgid "Raw Memory Interface" msgstr "生メモリインターフェース" #: ../../c-api/memory.rst:133 msgid "" "The following function sets are wrappers to the system allocator. These " "functions are thread-safe, the :term:`GIL ` does " "not need to be held." msgstr "" "以下の関数群はシステムのアロケータをラップします。\n" "これらの関数はスレッドセーフで、 :term:`GIL ` を保持" "していなくても呼び出すことができます。" #: ../../c-api/memory.rst:137 msgid "" "The :ref:`default raw memory allocator ` uses the " "following functions: :c:func:`malloc`, :c:func:`calloc`, :c:func:`realloc` " "and :c:func:`free`; call ``malloc(1)`` (or ``calloc(1, 1)``) when requesting " "zero bytes." msgstr "" "デフォルトの :ref:`生メモリアロケーター ` は次の関" "数を利用します: :c:func:`malloc`, :c:func:`calloc`, :c:func:`realloc`, :c:" "func:`free`\n" "0バイトを要求されたときには ``malloc(1)`` (あるいは ``calloc(1, 1)``) を呼び" "ます。" #: ../../c-api/memory.rst:146 ../../c-api/memory.rst:217 #: ../../c-api/memory.rst:325 msgid "" "Allocates *n* bytes and returns a pointer of type :c:expr:`void*` to the " "allocated memory, or ``NULL`` if the request fails." msgstr "" "*n* バイトを割り当て、そのメモリを指す :c:expr:`void*` 型のポインタを返しま" "す。要求が失敗した場合 ``NULL`` を返します。" #: ../../c-api/memory.rst:149 msgid "" "Requesting zero bytes returns a distinct non-``NULL`` pointer if possible, " "as if ``PyMem_RawMalloc(1)`` had been called instead. The memory will not " "have been initialized in any way." msgstr "" "0バイトを要求すると、 ``PyMem_RawMalloc(1)`` が呼ばれたときと同じように、可能" "なら ``NULL`` でないユニークなポインタを返します。確保されたメモリーにはいか" "なる初期化も行われません。" #: ../../c-api/memory.rst:156 ../../c-api/memory.rst:227 #: ../../c-api/memory.rst:335 msgid "" "Allocates *nelem* elements each whose size in bytes is *elsize* and returns " "a pointer of type :c:expr:`void*` to the allocated memory, or ``NULL`` if " "the request fails. The memory is initialized to zeros." msgstr "" "各要素が *elsize* バイトの要素 *nelem* 個分のメモリーを確保し、そのメモリーを" "指す :c:expr:`void*` 型のポインタを返します。アロケートに失敗した場合は " "``NULL`` を返します。確保されたメモリー領域はゼロで初期化されます。" #: ../../c-api/memory.rst:160 msgid "" "Requesting zero elements or elements of size zero bytes returns a distinct " "non-``NULL`` pointer if possible, as if ``PyMem_RawCalloc(1, 1)`` had been " "called instead." msgstr "" "要素数か要素のサイズが0バイトの要求に対しては、可能なら ``PyMem_RawCalloc(1, " "1)`` が呼ばれたのと同じように、ユニークな ``NULL`` でないポインタを返します。" #: ../../c-api/memory.rst:169 ../../c-api/memory.rst:240 #: ../../c-api/memory.rst:348 msgid "" "Resizes the memory block pointed to by *p* to *n* bytes. The contents will " "be unchanged to the minimum of the old and the new sizes." msgstr "" "*p* が指すメモリブロックを *n* バイトにリサイズします。古いサイズと新しいサイ" "ズの小さい方までの内容は変更されません。" #: ../../c-api/memory.rst:172 msgid "" "If *p* is ``NULL``, the call is equivalent to ``PyMem_RawMalloc(n)``; else " "if *n* is equal to zero, the memory block is resized but is not freed, and " "the returned pointer is non-``NULL``." msgstr "" "*p* が ``NULL`` の場合呼び出しは ``PyMem_RawMalloc(n)`` と等価です。そうでな" "く、 *n* がゼロに等しい場合、メモリブロックはリサイズされますが解放されませ" "ん。返されたポインタは非 ``NULL`` です。" #: ../../c-api/memory.rst:176 msgid "" "Unless *p* is ``NULL``, it must have been returned by a previous call to :c:" "func:`PyMem_RawMalloc`, :c:func:`PyMem_RawRealloc` or :c:func:" "`PyMem_RawCalloc`." msgstr "" "*p* が ``NULL`` でない限り、*p* はそれより前の :c:func:`PyMem_RawMalloc`, :c:" "func:`PyMem_RawRealloc`, :c:func:`PyMem_RawCalloc` の呼び出しにより返されなけ" "ればなりません。" #: ../../c-api/memory.rst:180 msgid "" "If the request fails, :c:func:`PyMem_RawRealloc` returns ``NULL`` and *p* " "remains a valid pointer to the previous memory area." msgstr "" "要求が失敗した場合 :c:func:`PyMem_RawRealloc` は ``NULL`` を返し、 *p* は前の" "メモリエリアをさす有効なポインタのままです。" #: ../../c-api/memory.rst:186 msgid "" "Frees the memory block pointed to by *p*, which must have been returned by a " "previous call to :c:func:`PyMem_RawMalloc`, :c:func:`PyMem_RawRealloc` or :c:" "func:`PyMem_RawCalloc`. Otherwise, or if ``PyMem_RawFree(p)`` has been " "called before, undefined behavior occurs." msgstr "" "*p* が指すメモリブロックを解放します。 *p* は以前呼び出した :c:func:" "`PyMem_RawMalloc`, :c:func:`PyMem_RawRealloc`, :c:func:`PyMem_RawCalloc` の" "返した値でなければなりません。それ以外の場合や ``PyMem_RawFree(p)`` を呼び出" "した後だった場合、未定義の動作になります。" #: ../../c-api/memory.rst:191 ../../c-api/memory.rst:261 #: ../../c-api/memory.rst:369 msgid "If *p* is ``NULL``, no operation is performed." msgstr "*p* が ``NULL`` の場合何もしません。" #: ../../c-api/memory.rst:197 msgid "Memory Interface" msgstr "メモリインターフェース" #: ../../c-api/memory.rst:199 ../../c-api/memory.rst:305 msgid "" "The following function sets, modeled after the ANSI C standard, but " "specifying behavior when requesting zero bytes, are available for allocating " "and releasing memory from the Python heap." msgstr "" "以下の関数群が利用して Python ヒープに対してメモリを確保したり解放したり出来" "ます。これらの関数は ANSI C 標準に従ってモデル化されていますが、0 バイトを要" "求した際の動作についても定義しています:" #: ../../c-api/memory.rst:203 msgid "" "The :ref:`default memory allocator ` uses the :" "ref:`pymalloc memory allocator `." msgstr "" #: ../../c-api/memory.rst:208 ../../c-api/memory.rst:320 msgid "" "The :term:`GIL ` must be held when using these " "functions." msgstr "" "これらの関数を呼ぶときには、 :term:`GIL ` を保持して" "おく必要があります。" #: ../../c-api/memory.rst:213 msgid "" "The default allocator is now pymalloc instead of system :c:func:`malloc`." msgstr "" "デフォルトのアロケータがシステムの :c:func:`malloc` から pymalloc になりまし" "た。" #: ../../c-api/memory.rst:220 msgid "" "Requesting zero bytes returns a distinct non-``NULL`` pointer if possible, " "as if ``PyMem_Malloc(1)`` had been called instead. The memory will not have " "been initialized in any way." msgstr "" "0バイトを要求すると、 ``PyMem_Malloc(1)`` が呼ばれたときと同じように、可能な" "ら ``NULL`` でないユニークなポインタを返します。\n" "確保されたメモリーにはいかなる初期化も行われません。" #: ../../c-api/memory.rst:231 msgid "" "Requesting zero elements or elements of size zero bytes returns a distinct " "non-``NULL`` pointer if possible, as if ``PyMem_Calloc(1, 1)`` had been " "called instead." msgstr "" "要素数か要素のサイズが0バイトの要求に対しては、可能なら ``PyMem_Calloc(1, " "1)`` が呼ばれたのと同じように、ユニークな ``NULL`` でないポインタを返します。" #: ../../c-api/memory.rst:243 msgid "" "If *p* is ``NULL``, the call is equivalent to ``PyMem_Malloc(n)``; else if " "*n* is equal to zero, the memory block is resized but is not freed, and the " "returned pointer is non-``NULL``." msgstr "" "*p* が ``NULL`` の場合呼び出しは ``PyMem_Malloc(n)`` と等価です。そうでな" "く、 *n* がゼロに等しい場合、メモリブロックはリサイズされますが解放されませ" "ん。返されたポインタは非 ``NULL`` です。" #: ../../c-api/memory.rst:247 msgid "" "Unless *p* is ``NULL``, it must have been returned by a previous call to :c:" "func:`PyMem_Malloc`, :c:func:`PyMem_Realloc` or :c:func:`PyMem_Calloc`." msgstr "" "*p* が ``NULL`` でない限り、*p* はそれより前の :c:func:`PyMem_Malloc`, :c:" "func:`PyMem_Realloc` または :c:func:`PyMem_Calloc` の呼び出しにより返されなけ" "ればなりません。" #: ../../c-api/memory.rst:250 msgid "" "If the request fails, :c:func:`PyMem_Realloc` returns ``NULL`` and *p* " "remains a valid pointer to the previous memory area." msgstr "" "要求が失敗した場合 :c:func:`PyMem_Realloc` は ``NULL`` を返し、 *p* は前のメ" "モリエリアをさす有効なポインタのままです。" #: ../../c-api/memory.rst:256 msgid "" "Frees the memory block pointed to by *p*, which must have been returned by a " "previous call to :c:func:`PyMem_Malloc`, :c:func:`PyMem_Realloc` or :c:func:" "`PyMem_Calloc`. Otherwise, or if ``PyMem_Free(p)`` has been called before, " "undefined behavior occurs." msgstr "" "*p* が指すメモリブロックを解放します。 *p* は以前呼び出した :c:func:" "`PyMem_Malloc`、 :c:func:`PyMem_Realloc`、または :c:func:`PyMem_Calloc` の返" "した値でなければなりません。それ以外の場合や ``PyMem_Free(p)`` を呼び出した後" "だった場合、未定義の動作になります。" #: ../../c-api/memory.rst:263 msgid "" "The following type-oriented macros are provided for convenience. Note that " "*TYPE* refers to any C type." msgstr "" "以下に挙げる型対象のマクロは利便性のために提供されているものです。*TYPE* は任" "意の C の型を表します。" #: ../../c-api/memory.rst:269 msgid "" "Same as :c:func:`PyMem_Malloc`, but allocates ``(n * sizeof(TYPE))`` bytes " "of memory. Returns a pointer cast to :c:expr:`TYPE*`. The memory will not " "have been initialized in any way." msgstr "" ":c:func:`PyMem_Malloc` と同じですが、 ``(n * sizeof(TYPE))`` バイトのメモリを" "確保します。 :c:expr:`TYPE*` に型キャストされたポインタを返します。メモリには" "何の初期化も行われていません。" #: ../../c-api/memory.rst:276 msgid "" "Same as :c:func:`PyMem_Realloc`, but the memory block is resized to ``(n * " "sizeof(TYPE))`` bytes. Returns a pointer cast to :c:expr:`TYPE*`. On " "return, *p* will be a pointer to the new memory area, or ``NULL`` in the " "event of failure." msgstr "" ":c:func:`PyMem_Realloc` と同じですが、 ``(n * sizeof(TYPE))`` バイトにサイズ" "変更されたメモリを確保します。\n" ":c:expr:`TYPE*` に型キャストされたポインタを返します。\n" "関数が終わったとき、 *p* は新しいメモリ領域のポインタか、失敗した場合は " "``NULL`` になります。" #: ../../c-api/memory.rst:281 msgid "" "This is a C preprocessor macro; *p* is always reassigned. Save the original " "value of *p* to avoid losing memory when handling errors." msgstr "" "これは C プリプロセッサマクロです。*p* は常に再代入されます。エラー処理時にメ" "モリを失うのを避けるには *p* の元の値を保存してください。" #: ../../c-api/memory.rst:287 msgid "Same as :c:func:`PyMem_Free`." msgstr ":c:func:`PyMem_Free` と同じです。" #: ../../c-api/memory.rst:289 msgid "" "In addition, the following macro sets are provided for calling the Python " "memory allocator directly, without involving the C API functions listed " "above. However, note that their use does not preserve binary compatibility " "across Python versions and is therefore deprecated in extension modules." msgstr "" "上記に加えて、C API 関数を介することなく Python メモリ操作関数を直接呼び出す" "ための以下のマクロセットが提供されています。ただし、これらのマクロは Python " "バージョン間でのバイナリ互換性を保てず、それゆえに拡張モジュールでは撤廃され" "ているので注意してください。" #: ../../c-api/memory.rst:294 msgid "``PyMem_MALLOC(size)``" msgstr "``PyMem_MALLOC(size)``" #: ../../c-api/memory.rst:295 msgid "``PyMem_NEW(type, size)``" msgstr "``PyMem_NEW(type, size)``" #: ../../c-api/memory.rst:296 msgid "``PyMem_REALLOC(ptr, size)``" msgstr "``PyMem_REALLOC(ptr, size)``" #: ../../c-api/memory.rst:297 msgid "``PyMem_RESIZE(ptr, type, size)``" msgstr "``PyMem_RESIZE(ptr, type, size)``" #: ../../c-api/memory.rst:298 msgid "``PyMem_FREE(ptr)``" msgstr "``PyMem_FREE(ptr)``" #: ../../c-api/memory.rst:299 msgid "``PyMem_DEL(ptr)``" msgstr "``PyMem_DEL(ptr)``" #: ../../c-api/memory.rst:303 msgid "Object allocators" msgstr "オブジェクトアロケータ" #: ../../c-api/memory.rst:310 msgid "" "There is no guarantee that the memory returned by these allocators can be " "successfully cast to a Python object when intercepting the allocating " "functions in this domain by the methods described in the :ref:`Customize " "Memory Allocators ` section." msgstr "" #: ../../c-api/memory.rst:315 msgid "" "The :ref:`default object allocator ` uses the :" "ref:`pymalloc memory allocator `." msgstr "" #: ../../c-api/memory.rst:328 msgid "" "Requesting zero bytes returns a distinct non-``NULL`` pointer if possible, " "as if ``PyObject_Malloc(1)`` had been called instead. The memory will not " "have been initialized in any way." msgstr "" "0バイトを要求すると、 ``PyObject_Malloc(1)`` が呼ばれたときと同じように、可能" "なら ``NULL`` でないユニークなポインタを返します。\n" "確保されたメモリーにはいかなる初期化も行われません。" #: ../../c-api/memory.rst:339 msgid "" "Requesting zero elements or elements of size zero bytes returns a distinct " "non-``NULL`` pointer if possible, as if ``PyObject_Calloc(1, 1)`` had been " "called instead." msgstr "" "要素数か要素のサイズが0バイトの要求に対しては、可能なら ``PyObject_Calloc(1, " "1)`` が呼ばれたのと同じように、ユニークな ``NULL`` でないポインタを返します。" #: ../../c-api/memory.rst:351 msgid "" "If *p* is ``NULL``, the call is equivalent to ``PyObject_Malloc(n)``; else " "if *n* is equal to zero, the memory block is resized but is not freed, and " "the returned pointer is non-``NULL``." msgstr "" "*p* が ``NULL`` の場合呼び出しは ``PyObject_Malloc(n)`` と等価です。そうでな" "く、 *n* がゼロに等しい場合、メモリブロックはリサイズされますが解放されませ" "ん。返されたポインタは非 ``NULL`` です。" #: ../../c-api/memory.rst:355 msgid "" "Unless *p* is ``NULL``, it must have been returned by a previous call to :c:" "func:`PyObject_Malloc`, :c:func:`PyObject_Realloc` or :c:func:" "`PyObject_Calloc`." msgstr "" "*p* が ``NULL`` でない限り、*p* はそれより前の :c:func:`PyObject_Malloc`, :c:" "func:`PyObject_Realloc` または :c:func:`PyObject_Calloc` の呼び出しにより返さ" "れなければなりません。" #: ../../c-api/memory.rst:358 msgid "" "If the request fails, :c:func:`PyObject_Realloc` returns ``NULL`` and *p* " "remains a valid pointer to the previous memory area." msgstr "" "要求が失敗した場合 :c:func:`PyObject_Realloc` は ``NULL`` を返し、 *p* は前の" "メモリエリアをさす有効なポインタのままです。" #: ../../c-api/memory.rst:364 msgid "" "Frees the memory block pointed to by *p*, which must have been returned by a " "previous call to :c:func:`PyObject_Malloc`, :c:func:`PyObject_Realloc` or :c:" "func:`PyObject_Calloc`. Otherwise, or if ``PyObject_Free(p)`` has been " "called before, undefined behavior occurs." msgstr "" "*p* が指すメモリブロックを解放します。 *p* は以前呼び出した :c:func:" "`PyObject_Malloc`、 :c:func:`PyObject_Realloc`、または :c:func:" "`PyObject_Calloc` の返した値でなければなりません。それ以外の場合や " "``PyObject_Free(p)`` を呼び出した後だった場合、未定義の動作になります。" #: ../../c-api/memory.rst:375 msgid "Default Memory Allocators" msgstr "" #: ../../c-api/memory.rst:377 msgid "Default memory allocators:" msgstr "" #: ../../c-api/memory.rst:380 msgid "Configuration" msgstr "Configuration" #: ../../c-api/memory.rst:380 msgid "Name" msgstr "名前" #: ../../c-api/memory.rst:380 msgid "PyMem_RawMalloc" msgstr "PyMem_RawMalloc" #: ../../c-api/memory.rst:380 msgid "PyMem_Malloc" msgstr "PyMem_Malloc" #: ../../c-api/memory.rst:380 msgid "PyObject_Malloc" msgstr "PyObject_Malloc" #: ../../c-api/memory.rst:382 msgid "Release build" msgstr "リリースビルド" #: ../../c-api/memory.rst:382 msgid "``\"pymalloc\"``" msgstr "``\"pymalloc\"``" #: ../../c-api/memory.rst:382 ../../c-api/memory.rst:384 msgid "``malloc``" msgstr "``malloc``" #: ../../c-api/memory.rst:382 msgid "``pymalloc``" msgstr "``pymalloc``" #: ../../c-api/memory.rst:383 msgid "Debug build" msgstr "デバッグビルド" #: ../../c-api/memory.rst:383 msgid "``\"pymalloc_debug\"``" msgstr "``\"pymalloc_debug\"``" #: ../../c-api/memory.rst:383 ../../c-api/memory.rst:385 msgid "``malloc`` + debug" msgstr "``malloc`` + debug" #: ../../c-api/memory.rst:383 msgid "``pymalloc`` + debug" msgstr "``pymalloc`` + debug" #: ../../c-api/memory.rst:384 msgid "Release build, without pymalloc" msgstr "pymalloc 無しのリリースビルド" #: ../../c-api/memory.rst:384 msgid "``\"malloc\"``" msgstr "``\"malloc\"``" #: ../../c-api/memory.rst:385 msgid "Debug build, without pymalloc" msgstr "pymalloc 無しのデバッグビルド" #: ../../c-api/memory.rst:385 msgid "``\"malloc_debug\"``" msgstr "``\"malloc_debug\"``" #: ../../c-api/memory.rst:388 msgid "Legend:" msgstr "説明:" #: ../../c-api/memory.rst:390 msgid "Name: value for :envvar:`PYTHONMALLOC` environment variable." msgstr "" #: ../../c-api/memory.rst:391 msgid "" "``malloc``: system allocators from the standard C library, C functions: :c:" "func:`malloc`, :c:func:`calloc`, :c:func:`realloc` and :c:func:`free`." msgstr "" #: ../../c-api/memory.rst:393 msgid "``pymalloc``: :ref:`pymalloc memory allocator `." msgstr "" #: ../../c-api/memory.rst:394 msgid "" "\"+ debug\": with :ref:`debug hooks on the Python memory allocators `." msgstr "" #: ../../c-api/memory.rst:396 msgid "\"Debug build\": :ref:`Python build in debug mode `." msgstr "" #: ../../c-api/memory.rst:401 msgid "Customize Memory Allocators" msgstr "メモリアロケータをカスタマイズする" #: ../../c-api/memory.rst:407 msgid "" "Structure used to describe a memory block allocator. The structure has the " "following fields:" msgstr "" #: ../../c-api/memory.rst:411 ../../c-api/memory.rst:647 msgid "Field" msgstr "フィールド" #: ../../c-api/memory.rst:411 ../../c-api/memory.rst:647 msgid "Meaning" msgstr "意味" #: ../../c-api/memory.rst:413 ../../c-api/memory.rst:649 msgid "``void *ctx``" msgstr "``void *ctx``" #: ../../c-api/memory.rst:413 ../../c-api/memory.rst:649 msgid "user context passed as first argument" msgstr "第一引数として渡されるユーザコンテキスト" #: ../../c-api/memory.rst:415 msgid "``void* malloc(void *ctx, size_t size)``" msgstr "``void* malloc(void *ctx, size_t size)``" #: ../../c-api/memory.rst:415 msgid "allocate a memory block" msgstr "メモリブロックを割り当てます" #: ../../c-api/memory.rst:417 msgid "``void* calloc(void *ctx, size_t nelem, size_t elsize)``" msgstr "``void* calloc(void *ctx, size_t nelem, size_t elsize)``" #: ../../c-api/memory.rst:417 msgid "allocate a memory block initialized with zeros" msgstr "0で初期化されたメモリブロックを割り当てます" #: ../../c-api/memory.rst:420 msgid "``void* realloc(void *ctx, void *ptr, size_t new_size)``" msgstr "``void* realloc(void *ctx, void *ptr, size_t new_size)``" #: ../../c-api/memory.rst:420 msgid "allocate or resize a memory block" msgstr "メモリブロックを割り当てるかリサイズします" #: ../../c-api/memory.rst:422 msgid "``void free(void *ctx, void *ptr)``" msgstr "``void free(void *ctx, void *ptr)``" #: ../../c-api/memory.rst:422 msgid "free a memory block" msgstr "メモリブロックを解放する" #: ../../c-api/memory.rst:425 msgid "" "The :c:type:`PyMemAllocator` structure was renamed to :c:type:" "`PyMemAllocatorEx` and a new ``calloc`` field was added." msgstr "" ":c:type:`PyMemAllocator` 構造体が :c:type:`PyMemAllocatorEx` にリネームされた" "上で ``calloc`` フィールドが追加されました。" #: ../../c-api/memory.rst:432 msgid "Enum used to identify an allocator domain. Domains:" msgstr "アロケータドメインを同定するための列挙型です。ドメインは:" #: ../../c-api/memory.rst:436 ../../c-api/memory.rst:445 #: ../../c-api/memory.rst:454 msgid "Functions:" msgstr "関数:" #: ../../c-api/memory.rst:438 msgid ":c:func:`PyMem_RawMalloc`" msgstr ":c:func:`PyMem_RawMalloc`" #: ../../c-api/memory.rst:439 msgid ":c:func:`PyMem_RawRealloc`" msgstr ":c:func:`PyMem_RawRealloc`" #: ../../c-api/memory.rst:440 msgid ":c:func:`PyMem_RawCalloc`" msgstr ":c:func:`PyMem_RawCalloc`" #: ../../c-api/memory.rst:441 msgid ":c:func:`PyMem_RawFree`" msgstr ":c:func:`PyMem_RawFree`" #: ../../c-api/memory.rst:447 msgid ":c:func:`PyMem_Malloc`," msgstr ":c:func:`PyMem_Malloc`," #: ../../c-api/memory.rst:448 msgid ":c:func:`PyMem_Realloc`" msgstr ":c:func:`PyMem_Realloc`" #: ../../c-api/memory.rst:449 msgid ":c:func:`PyMem_Calloc`" msgstr ":c:func:`PyMem_Calloc`" #: ../../c-api/memory.rst:450 msgid ":c:func:`PyMem_Free`" msgstr ":c:func:`PyMem_Free`" #: ../../c-api/memory.rst:456 msgid ":c:func:`PyObject_Malloc`" msgstr ":c:func:`PyObject_Malloc`" #: ../../c-api/memory.rst:457 msgid ":c:func:`PyObject_Realloc`" msgstr ":c:func:`PyObject_Realloc`" #: ../../c-api/memory.rst:458 msgid ":c:func:`PyObject_Calloc`" msgstr ":c:func:`PyObject_Calloc`" #: ../../c-api/memory.rst:459 msgid ":c:func:`PyObject_Free`" msgstr ":c:func:`PyObject_Free`" #: ../../c-api/memory.rst:463 msgid "Get the memory block allocator of the specified domain." msgstr "指定されたドメインのメモリブロックアロケータを取得します。" #: ../../c-api/memory.rst:468 msgid "Set the memory block allocator of the specified domain." msgstr "指定されたドメインのメモリブロックアロケータを設定します。" #: ../../c-api/memory.rst:470 msgid "" "The new allocator must return a distinct non-``NULL`` pointer when " "requesting zero bytes." msgstr "" "新しいアロケータは、0バイトを要求されたときユニークな ``NULL`` でないポインタ" "を返さなければなりません。" #: ../../c-api/memory.rst:473 msgid "" "For the :c:data:`PYMEM_DOMAIN_RAW` domain, the allocator must be thread-" "safe: the :term:`GIL ` is not held when the " "allocator is called." msgstr "" ":c:data:`PYMEM_DOMAIN_RAW` ドメインでは、アロケータはスレッドセーフでなければ" "なりません: アロケータが呼び出されたとき :term:`GIL ` は保持されていません。" #: ../../c-api/memory.rst:477 msgid "" "If the new allocator is not a hook (does not call the previous allocator), " "the :c:func:`PyMem_SetupDebugHooks` function must be called to reinstall the " "debug hooks on top on the new allocator." msgstr "" "新しいアロケータがフックでない (1つ前のアロケータを呼び出さない) 場合、 :c:" "func:`PyMem_SetupDebugHooks` 関数を呼び出して、新しいアロケータの上にデバッグ" "フックを再度設置しなければなりません。" #: ../../c-api/memory.rst:484 msgid ":c:func:`PyMem_SetAllocator` does have the following contract:" msgstr "" #: ../../c-api/memory.rst:486 msgid "" "It can be called after :c:func:`Py_PreInitialize` and before :c:func:" "`Py_InitializeFromConfig` to install a custom memory allocator. There are no " "restrictions over the installed allocator other than the ones imposed by the " "domain (for instance, the Raw Domain allows the allocator to be called " "without the GIL held). See :ref:`the section on allocator domains ` for more information." msgstr "" #: ../../c-api/memory.rst:494 msgid "" "If called after Python has finish initializing (after :c:func:" "`Py_InitializeFromConfig` has been called) the allocator **must** wrap the " "existing allocator. Substituting the current allocator for some other " "arbitrary one is **not supported**." msgstr "" #: ../../c-api/memory.rst:503 msgid "" "Setup :ref:`debug hooks in the Python memory allocators ` " "to detect memory errors." msgstr "" #: ../../c-api/memory.rst:510 msgid "Debug hooks on the Python memory allocators" msgstr "" #: ../../c-api/memory.rst:512 msgid "" "When :ref:`Python is built in debug mode `, the :c:func:" "`PyMem_SetupDebugHooks` function is called at the :ref:`Python " "preinitialization ` to setup debug hooks on Python memory " "allocators to detect memory errors." msgstr "" #: ../../c-api/memory.rst:517 msgid "" "The :envvar:`PYTHONMALLOC` environment variable can be used to install debug " "hooks on a Python compiled in release mode (ex: ``PYTHONMALLOC=debug``)." msgstr "" #: ../../c-api/memory.rst:520 msgid "" "The :c:func:`PyMem_SetupDebugHooks` function can be used to set debug hooks " "after calling :c:func:`PyMem_SetAllocator`." msgstr "" #: ../../c-api/memory.rst:523 msgid "" "These debug hooks fill dynamically allocated memory blocks with special, " "recognizable bit patterns. Newly allocated memory is filled with the byte " "``0xCD`` (``PYMEM_CLEANBYTE``), freed memory is filled with the byte " "``0xDD`` (``PYMEM_DEADBYTE``). Memory blocks are surrounded by \"forbidden " "bytes\" filled with the byte ``0xFD`` (``PYMEM_FORBIDDENBYTE``). Strings of " "these bytes are unlikely to be valid addresses, floats, or ASCII strings." msgstr "" #: ../../c-api/memory.rst:530 msgid "Runtime checks:" msgstr "実行時チェック:" #: ../../c-api/memory.rst:532 msgid "" "Detect API violations. For example, detect if :c:func:`PyObject_Free` is " "called on a memory block allocated by :c:func:`PyMem_Malloc`." msgstr "" #: ../../c-api/memory.rst:534 msgid "Detect write before the start of the buffer (buffer underflow)." msgstr "" #: ../../c-api/memory.rst:535 msgid "Detect write after the end of the buffer (buffer overflow)." msgstr "" #: ../../c-api/memory.rst:536 msgid "" "Check that the :term:`GIL ` is held when allocator " "functions of :c:data:`PYMEM_DOMAIN_OBJ` (ex: :c:func:`PyObject_Malloc`) and :" "c:data:`PYMEM_DOMAIN_MEM` (ex: :c:func:`PyMem_Malloc`) domains are called." msgstr "" #: ../../c-api/memory.rst:541 msgid "" "On error, the debug hooks use the :mod:`tracemalloc` module to get the " "traceback where a memory block was allocated. The traceback is only " "displayed if :mod:`tracemalloc` is tracing Python memory allocations and the " "memory block was traced." msgstr "" #: ../../c-api/memory.rst:546 msgid "" "Let *S* = ``sizeof(size_t)``. ``2*S`` bytes are added at each end of each " "block of *N* bytes requested. The memory layout is like so, where p " "represents the address returned by a malloc-like or realloc-like function " "(``p[i:j]`` means the slice of bytes from ``*(p+i)`` inclusive up to " "``*(p+j)`` exclusive; note that the treatment of negative indices differs " "from a Python slice):" msgstr "" #: ../../c-api/memory.rst:553 msgid "``p[-2*S:-S]``" msgstr "" #: ../../c-api/memory.rst:553 msgid "" "Number of bytes originally asked for. This is a size_t, big-endian (easier " "to read in a memory dump)." msgstr "" #: ../../c-api/memory.rst:560 msgid "``p[-S]``" msgstr "" #: ../../c-api/memory.rst:556 msgid "API identifier (ASCII character):" msgstr "" #: ../../c-api/memory.rst:558 msgid "``'r'`` for :c:data:`PYMEM_DOMAIN_RAW`." msgstr "" #: ../../c-api/memory.rst:559 msgid "``'m'`` for :c:data:`PYMEM_DOMAIN_MEM`." msgstr "" #: ../../c-api/memory.rst:560 msgid "``'o'`` for :c:data:`PYMEM_DOMAIN_OBJ`." msgstr "" #: ../../c-api/memory.rst:563 msgid "``p[-S+1:0]``" msgstr "" #: ../../c-api/memory.rst:563 msgid "Copies of PYMEM_FORBIDDENBYTE. Used to catch under- writes and reads." msgstr "" #: ../../c-api/memory.rst:572 msgid "``p[0:N]``" msgstr "" #: ../../c-api/memory.rst:566 msgid "" "The requested memory, filled with copies of PYMEM_CLEANBYTE, used to catch " "reference to uninitialized memory. When a realloc-like function is called " "requesting a larger memory block, the new excess bytes are also filled with " "PYMEM_CLEANBYTE. When a free-like function is called, these are overwritten " "with PYMEM_DEADBYTE, to catch reference to freed memory. When a realloc- " "like function is called requesting a smaller memory block, the excess old " "bytes are also filled with PYMEM_DEADBYTE." msgstr "" #: ../../c-api/memory.rst:575 msgid "``p[N:N+S]``" msgstr "" #: ../../c-api/memory.rst:575 msgid "Copies of PYMEM_FORBIDDENBYTE. Used to catch over- writes and reads." msgstr "" #: ../../c-api/memory.rst:586 msgid "``p[N+S:N+2*S]``" msgstr "" #: ../../c-api/memory.rst:578 msgid "" "Only used if the ``PYMEM_DEBUG_SERIALNO`` macro is defined (not defined by " "default)." msgstr "" #: ../../c-api/memory.rst:581 msgid "" "A serial number, incremented by 1 on each call to a malloc-like or realloc-" "like function. Big-endian ``size_t``. If \"bad memory\" is detected later, " "the serial number gives an excellent way to set a breakpoint on the next " "run, to capture the instant at which this block was passed out. The static " "function bumpserialno() in obmalloc.c is the only place the serial number is " "incremented, and exists so you can set such a breakpoint easily." msgstr "" #: ../../c-api/memory.rst:588 msgid "" "A realloc-like or free-like function first checks that the " "PYMEM_FORBIDDENBYTE bytes at each end are intact. If they've been altered, " "diagnostic output is written to stderr, and the program is aborted via " "Py_FatalError(). The other main failure mode is provoking a memory error " "when a program reads up one of the special bit patterns and tries to use it " "as an address. If you get in a debugger then and look at the object, you're " "likely to see that it's entirely filled with PYMEM_DEADBYTE (meaning freed " "memory is getting used) or PYMEM_CLEANBYTE (meaning uninitialized memory is " "getting used)." msgstr "" #: ../../c-api/memory.rst:597 msgid "" "The :c:func:`PyMem_SetupDebugHooks` function now also works on Python " "compiled in release mode. On error, the debug hooks now use :mod:" "`tracemalloc` to get the traceback where a memory block was allocated. The " "debug hooks now also check if the GIL is held when functions of :c:data:" "`PYMEM_DOMAIN_OBJ` and :c:data:`PYMEM_DOMAIN_MEM` domains are called." msgstr "" #: ../../c-api/memory.rst:605 msgid "" "Byte patterns ``0xCB`` (``PYMEM_CLEANBYTE``), ``0xDB`` (``PYMEM_DEADBYTE``) " "and ``0xFB`` (``PYMEM_FORBIDDENBYTE``) have been replaced with ``0xCD``, " "``0xDD`` and ``0xFD`` to use the same values than Windows CRT debug " "``malloc()`` and ``free()``." msgstr "" #: ../../c-api/memory.rst:615 msgid "The pymalloc allocator" msgstr "pymalloc アロケータ" #: ../../c-api/memory.rst:617 msgid "" "Python has a *pymalloc* allocator optimized for small objects (smaller or " "equal to 512 bytes) with a short lifetime. It uses memory mappings called " "\"arenas\" with a fixed size of 256 KiB. It falls back to :c:func:" "`PyMem_RawMalloc` and :c:func:`PyMem_RawRealloc` for allocations larger than " "512 bytes." msgstr "" "Python には、寿命の短いの小さな(512バイト以下の)オブジェクトに最適化された " "*pymalloc* アロケータがあります。 *pymalloc* は、256 KiBの固定サイズの \"ア" "リーナ\" と呼びれるメモリマッピングを使います。512バイトよりも大きな割り当て" "では、 :c:func:`PyMem_RawMalloc` と :c:func:`PyMem_RawRealloc` にフォールバッ" "クします。" #: ../../c-api/memory.rst:622 msgid "" "*pymalloc* is the :ref:`default allocator ` of " "the :c:data:`PYMEM_DOMAIN_MEM` (ex: :c:func:`PyMem_Malloc`) and :c:data:" "`PYMEM_DOMAIN_OBJ` (ex: :c:func:`PyObject_Malloc`) domains." msgstr "" "*pymalloc* は、:c:data:`PYMEM_DOMAIN_MEM` (ex: :c:func:`PyMem_Malloc`) と :c:" "data:`PYMEM_DOMAIN_OBJ` (ex: :c:func:`PyObject_Malloc`) ドメインの :ref:`既定" "のアロケータ ` です。" #: ../../c-api/memory.rst:626 msgid "The arena allocator uses the following functions:" msgstr "アリーナアロケータは、次の関数を使います:" #: ../../c-api/memory.rst:628 msgid ":c:func:`VirtualAlloc` and :c:func:`VirtualFree` on Windows," msgstr "Windows では :c:func:`VirtualAlloc` と :c:func:`VirtualFree`、" #: ../../c-api/memory.rst:629 msgid ":c:func:`mmap` and :c:func:`munmap` if available," msgstr "利用できる場合、:c:func:`mmap` と :c:func:`munmap`、" #: ../../c-api/memory.rst:630 msgid ":c:func:`malloc` and :c:func:`free` otherwise." msgstr "それ以外の場合は :c:func:`malloc` と :c:func:`free`。" #: ../../c-api/memory.rst:632 msgid "" "This allocator is disabled if Python is configured with the :option:`--" "without-pymalloc` option. It can also be disabled at runtime using the :" "envvar:`PYTHONMALLOC` environment variable (ex: ``PYTHONMALLOC=malloc``)." msgstr "" #: ../../c-api/memory.rst:637 msgid "Customize pymalloc Arena Allocator" msgstr "pymalloc アリーナアロケータのカスタマイズ" #: ../../c-api/memory.rst:643 msgid "" "Structure used to describe an arena allocator. The structure has three " "fields:" msgstr "" "アリーナアロケータを記述するための構造体です。3つのフィールドを持ちます:" #: ../../c-api/memory.rst:651 msgid "``void* alloc(void *ctx, size_t size)``" msgstr "``void* alloc(void *ctx, size_t size)``" #: ../../c-api/memory.rst:651 msgid "allocate an arena of size bytes" msgstr "size バイトのアリーナを割り当てます" #: ../../c-api/memory.rst:653 msgid "``void free(void *ctx, void *ptr, size_t size)``" msgstr "" #: ../../c-api/memory.rst:653 msgid "free an arena" msgstr "アリーナを解放します" #: ../../c-api/memory.rst:658 msgid "Get the arena allocator." msgstr "アリーナアロケータを取得します。" #: ../../c-api/memory.rst:662 msgid "Set the arena allocator." msgstr "アリーナアロケータを設定します。" #: ../../c-api/memory.rst:666 msgid "tracemalloc C API" msgstr "tracemalloc C API" #: ../../c-api/memory.rst:672 msgid "Track an allocated memory block in the :mod:`tracemalloc` module." msgstr "" #: ../../c-api/memory.rst:674 msgid "" "Return ``0`` on success, return ``-1`` on error (failed to allocate memory " "to store the trace). Return ``-2`` if tracemalloc is disabled." msgstr "" #: ../../c-api/memory.rst:677 msgid "If memory block is already tracked, update the existing trace." msgstr "" #: ../../c-api/memory.rst:681 msgid "" "Untrack an allocated memory block in the :mod:`tracemalloc` module. Do " "nothing if the block was not tracked." msgstr "" #: ../../c-api/memory.rst:684 msgid "Return ``-2`` if tracemalloc is disabled, otherwise return ``0``." msgstr "" #: ../../c-api/memory.rst:690 msgid "Examples" msgstr "使用例" #: ../../c-api/memory.rst:692 msgid "" "Here is the example from section :ref:`memoryoverview`, rewritten so that " "the I/O buffer is allocated from the Python heap by using the first function " "set::" msgstr "" "最初に述べた関数セットを使って、 :ref:`memoryoverview` 節の例を Python ヒープ" "に I/O バッファをメモリ確保するように書き換えたものを以下に示します::" #: ../../c-api/memory.rst:705 msgid "The same code using the type-oriented function set::" msgstr "同じコードを型対象の関数セットで書いたものを以下に示します::" #: ../../c-api/memory.rst:717 msgid "" "Note that in the two examples above, the buffer is always manipulated via " "functions belonging to the same set. Indeed, it is required to use the same " "memory API family for a given memory block, so that the risk of mixing " "different allocators is reduced to a minimum. The following code sequence " "contains two errors, one of which is labeled as *fatal* because it mixes two " "different allocators operating on different heaps. ::" msgstr "" "上の二つの例では、バッファを常に同じ関数セットに属する関数で操作していること" "に注意してください。実際、あるメモリブロックに対する操作は、異なるメモリ操作" "機構を混用する危険を減らすために、同じメモリ API ファミリを使って行うことが必" "要です。以下のコードには二つのエラーがあり、そのうちの一つには異なるヒープを" "操作する別のメモリ操作関数を混用しているので *致命的 (Fatal)* とラベルづけを" "しています。 ::" #: ../../c-api/memory.rst:732 msgid "" "In addition to the functions aimed at handling raw memory blocks from the " "Python heap, objects in Python are allocated and released with :c:func:" "`PyObject_New`, :c:func:`PyObject_NewVar` and :c:func:`PyObject_Del`." msgstr "" "素のメモリブロックを Python ヒープ上で操作する関数に加え、 :c:func:" "`PyObject_New` 、 :c:func:`PyObject_NewVar` 、および :c:func:`PyObject_Del` " "を使うと、 Python におけるオブジェクトをメモリ確保したり解放したりできます。" #: ../../c-api/memory.rst:736 msgid "" "These will be explained in the next chapter on defining and implementing new " "object types in C." msgstr "" "これらの関数については、次章の C による新しいオブジェクト型の定義や実装に関す" "る記述の中で説明します。"