BARfly Help - Options Menu - Memory and BAR_Services settings

  Memory and BAR_Services settings

Select Options.BAR_Services Settings  to bring up the dialog box to the left.  From this dialog, you can modify BAR_Services initialization settings.

These settings are the same as those required to initialize a BAR_Services interfacial object.  Even though BARfly does not allow you to call such an initialization function directly, the parallels between the function call parameters and the fields in this dialog box make the interface almost ubiquitous.

One BAR_Services instance is guaranteed to exist when BARfly starts up.  If desired, the user can adjust the memory settings to create a second instance for data file management, isolating the first instance to just the BARfly front-end.

It is actually the Memory Settings selected in the memory dialog box, opened via Options.Memory, that control the initial BARfly memory size settings.  For all other BAR_Services creation requests, the value entered into the "Memory Size" field of the BAR_Services Settings dialog box is used.

Setting these fields to nonsensical values can prevent BARfly from starting up properly again.  Use the "Reset to Defaults" button to restore all fields to default settings, which are guaranteed to work.

Select Options.Memory to bring up the dialog box to the right.  From this dialog, you can modify memory settings associated with BARfly startup.  In order to get modified settings to take effect, you must close BARfly and restart it.

  • Initial memory for BARfly startup:  The number of bytes to allocate to BARfly initially.  It is recommended that this value be at least 4 megabytes (4,000,000 bytes).
  • Maximum BAR_Services instances:  The maximum number of slots to reserve for BAR_Services instances.  Between one and two are created at startup; you can create any number of additional instances if your system has enough memory.
  • Maximum memory for log:  The maximum number of bytes the log can hold.  This doesn't need to be very much, since you are normally only concerned with the last several lines of the log.  A value of 65,000 is reasonable.
  • Maintain separate BAR_Services instances for internal BARfly operations and data files:  This option creates a second BAR_Services instance after the first one during application startup.  The size used for this instance is set in the field below the check box.  It is recommended that this value be at least 1 megabyte (1,000,000 bytes)

Setting these fields to nonsensical values can prevent BARfly from starting up properly again.  Use the "Reset to Defaults" button to restore all fields to default settings, which are guaranteed to work.

If you are unable to restart BARfly, you can delete "BARfly.cfg" in the installation directory to restore all settings to their defaults the next time BARfly is started up.


 An explanation of BAR_Services settings 

  • Fundamental limits
    • Memory Size:  This is the total byte size allocated to the BAR_Services instance on initialization.  The memory space needed for node handles, BAR instances, BAR_Registry instances, and other support structures is deducted immediately from this total, leaving the remainder of this memory for general use.
    • Stack Size:  This is the byte size of the stack used while running I.F. functions.  The stack size chosen should be commensurate with the complexity of the functions being called in I.F. functions.  A value of 2,000 is adequate for nearly all cases, although it may be necessary to increase it if some implementation files cause stack overflow errors.
    • Max Nodes:  This is the number of node handles allocated to the BAR_Services instance.  BARfly reserves some node handles for its own internal logic, but deserialized data files take up the bulk of node handles.  The more complex a data file is, the greater its node handle usage requirements.  Each node handle requires 24 bytes of memory, which is carved out of the Memory Size total on initialization.
    • Max BAR_Registry Instances:  This is the most number of registry objects that can be supported simultaneously for the BAR_Services instance.  Each time a registry tab is opened, one of these objects is taken up.
    • Max BAR Instances:  This is the most number of BAR objects that can be supported simultaneously for the BAR_Services instance.  Each time a data file is opened, one of these objects is taken up.  Some BAR instances are also used internally by BARfly on a piecemeal basis, such as in the execution of I.F. functions for implementation files.  This value should be kept high, as the data overhead required for a BAR instance is fairly low.
  • Read/Write Limits
    • Max File Read Size:  This is the largest data file read size that the instance can support.  Increase this if you are working with large files.
    • Max File Write Size:  This is the largest data file write size that the instance can support.  Increase this if you are working with large files.
    • Max "Deserialize" Output:  During deserialization, individual "Deserialize" methods are only allowed to cumulatively allocate up to a maximum of this number of bytes.
    • Max "Serialize" Output:  During serialization, individual "Serialize" methods are only allowed to cumulatively allocate up to a maximum of this number of bytes.
    • Max File Read Time:   This is the largest amount of time, in milliseconds, that the instance allows for deserialization.  You should keep this value to a time long enough to allow most files to finish loading, but not so long as to allow a deadlocked load.  A value between 4 and 16 seconds is recommended.
    • Max File Write Time:   This is the largest amount of time, in milliseconds, that the instance allows for serialization.  You should keep this value to a time long enough to allow most files to finish saving, but not so long as to allow a deadlocked save.  A value between 4 and 16 seconds is recommended.
  • Security Settings
    • "Opt-in" Path:  This is an optional disk path fragment used to restrict the paths of files that can be loaded or saved.  Multiple paths can be separated by semicolons.  If an opt-in path is specified, all loads of data files must have the first part of its absolute pathname matching one of the opt-in path fragments, or else the load operation will fail.  If there is no opt-in path specified, all paths are opted in.
    • "Opt-out" Path:  This is an optional disk path fragment used to restrict the paths of files that can be loaded or saved.  Multiple paths can be separated by semicolons.  If an opt-out path is specified, all loads of data files must not have the first part of its absolute pathname matching one of the opt-out path fragments, or else the load operation will fail.  If there is no opt-out path specified, no paths are opted out.
  • Engine Control Flags
    • Memory Bounds Test:  Test memory access bounds while executing I.F. functions.  Unchecking this option may improve performance.  It is strongly suggested you leave this checked.
    • Stack Overflow Test:  Test for stack overflow while executing I.F. functions.  It is strongly suggested you leave this checked.
    • Math Domain Test:  Test for mathematical domain errors while executing I.F. functions.  It is strongly suggested you leave this checked.
    • Opcode Validity Test:  Test for opcode/mod byte logic errors while executing I.F. functions.  Unchecking this option may improve performance.  It is strongly suggested you leave this checked.
    • Ignore Breakpoints:  If checked, all breakpoints in I.F. functions are ignored.  If unchecked, breakpoints in I.F. functions halt function execution.
  • Opcode Execution Limits
    • Max Read Cycles:  This limits the total amount of opcode execution iterations of I.F. functions during deserialization.  Complex functions called by critical steps will take more cycles than those functions that are relatively simple.  Increase this value if you are working with complex I.F. functions and/or very large, complex data files.
    • Max Write Cycles:  This limits the total amount of opcode execution iterations of I.F. functions during serialization.  Complex functions called by critical steps will take more cycles than those functions that are relatively simple.  Increase this value if you are working with complex I.F. functions and/or very large, complex data files.
    • Max Overall Cycles:  This limits the total amount of opcode execution iterations of I.F. functions during a single function execution session.  The limit applies to I.F. functions called by critical steps as well as those called by invoking Run.Run I.F. function.


 Creating and managing BAR_Services instances

Select File.Manage BAR_Services instances  to bring up the dialog box to the left.  From this dialog, you can create, analyze, select, and remove BAR_Services instances.

To view the associations (data files and other views) of all BAR_Services instances, select the line in the list and click the View Associations button.  Click the button again to display the list once more.

To view memory blocks of a particular instance, select the line in the list and click the View Memory button.

You can create a new instance (if an instance slot is free) by clicking New Instance.  You can also create a new instance without opening this dialog by selecting File.Create BAR_Services instance from the menu.

You can destroy a BAR_Services instance by selecting the instance and clicking Destroy Instance.  This action will close all views dependent on the BAR_Services instance.  This is a high-level, data-destructive button whose functionality should not be taken lightly.  Cancelling the closing of an unsaved file will halt the instance destruction operation.

The initial BARfly instance is a special case--it cannot be destroyed.  BARfly uses BAR to drive its internal architecture, so this instance cannot go away unless the application is itself closed.

Any time you want to create a data file in a specific BAR_Services instance, simply select the instance and close the dialog box.  All subsequent invocations of File.New Data File and File.Open Data File will cause the data file to exist in the explicitly selected instance.  While not necessary in most cases, sometimes it is beneficial to isolate different types of data files in their own memory spaces in this fashion.


  See also: [Data file load settings] [Data file save settings] [Settings for loading and saving BAR implementation files]
[Node editing settings] [Tree control line info settings] [Subnode view settings]
[Dump view settings] [Text view settings] [Raw view settings]
[Memory and BAR_Services settings] [Message display settings] [Toggling tool windows]


BARfly Help Copyright © 2009 Christopher Allen