Workshop/MiracleHaskell/019-answer
回答(みんな)
回答(岡部)
まず、リストのメモリ構造については GHCのこと の代数的データ型の項目を参照のこと。
ヒープの形を比較してみる
ghc-vis を使ってヒープの形を比較してみた。
{-# LANGUAGE OverloadedStrings #-}
module MyString (bStr, sStr) where
import qualified Data.ByteString.Lazy as BL
import Data.ByteString.Char8 ()
bStr :: BL.ByteString
bStr = BL.fromChunks ["abcd", "efgh"]
sStr :: String
sStr = "abcdefgh"
Stringのヒープ
単なるリスト構造。
ByteString(Lazy)のヒープ
2つのチャンクに分かれていて、チャンク同士の関係はリスト構造そのもの。 ただし、チャンクの中身は生のポインタで表現されている。