Perl supports the memory allocations systems other than malloc+free.

As such, memory that will be freed by Perl (such as a scalar's string buffer) will need to be allocated using the allocator Perl is configured to use. This is that to which Newx provides access. If you use an incompatible allocator, Perl won't be able to free the memory, and it might very well crash when it tries.

You can signal Perl not to free a scalar's string buffer by setting its SvLEN to zero. That way, you could assign malloc'ed data or even static-storage data (e.g. a constant) to a scalar. It becomes your responsibility to free it (e.g. in a the destructor of the object the contains the scalar). Note that setting SvLEN to zero won't stop Perl from replacing the buffer with a new one if do something like $s .= "!";.


In reply to Re: What difference between malloc and Newx, how attach a C string to SV directly? by ikegami
in thread What difference between malloc and Newx, how attach a C string to SV directly? by xiaoyafeng

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.