# Profiler Words An optional profiler may be loaded from `extra/common/profile.fs`. Once loaded, any `:` or `:noname` words defined afterwards may be profiled by executing `profile::init-profile` with a provided profiler map size, which initializes a map for storing profiler entries, and then dumped to the console by executing `profile::dump-profile`. Note that the profile map size is in entries, and each entry is eight bytes in size (take care to not exhaust all the RAM available); also note that this size must be a power of two. If more distinct words compiled after `extra/common/profile.fs` is loaded are executed than the profile map size, an infinite loop will arise. (This is a consequence of avoiding putting a check in the profiler for exhausting the profile map space, in order to optimize its performance.) ### `profile` The `profile` module contains the following words: ##### `init-profile` ( entries -- ) Initialize the profiler with a profile map with *entries* entries, where *entries* must be a power of two and each entry takes up eight bytes of RAM. ##### `dump-profile` ( -- ) Dump the xt, name, and number of times executed for each `:` or `:noname` word compiled after `extra/common/profile.fs` is loaded and executed after `profile::init-profile` is invoked. ##### `clear-profile` ( -- ) Reset the profiler execution counts to zero. ##### `x-profile-map-entries-not-power-of-two` ( -- ) Profiler map entry count specified is not a power of two exception. ##### `x-profile-already-inited` ( -- ) Profiler already initialized exception. ### `forth` The `forth` module contains redefinitions of `:` and `:noname` to enable the profiler to function. Note that this does not change prior words defined with these words.