More debugging
This commit is contained in:
parent
42c22bc1eb
commit
a375388591
5 changed files with 48 additions and 10 deletions
|
|
@ -1,16 +1,17 @@
|
||||||
mkfile_path = $(abspath $(lastword $(MAKEFILE_LIST)))
|
mkfile_path = $(abspath $(lastword $(MAKEFILE_LIST)))
|
||||||
current_dir = $(notdir $(patsubst %/,%,$(dir $(mkfile_path))))
|
current_dir = $(notdir $(patsubst %/,%,$(dir $(mkfile_path))))
|
||||||
|
PWD_V = /Users/valtermiari/Desktop/DV/Bachelors/code/language/src/GC/include
|
||||||
CC = clang++
|
CC = clang++
|
||||||
PWD = /home/virre/dev/systemF/org/language/src/GC/include
|
PWD = /home/virre/dev/systemF/org/language/src/GC/include
|
||||||
CFLAGS = -Wall -Wextra -v -g -std=gnu++20 -stdlib=libc++ -I
|
CFLAGS = -Wall -Wextra -v -g -std=gnu++20 -stdlib=libc++ -I
|
||||||
VGFLAGS = --leak-check=full --show-leak-kinds=all
|
VGFLAGS = --leak-check=full --show-leak-kinds=all
|
||||||
|
|
||||||
heap:
|
heap:
|
||||||
$(CC) $(CFLAGS)$(PWD) lib/heap.cpp
|
$(CC) $(CFLAGS)$(PWD_V) lib/heap.cpp
|
||||||
|
|
||||||
h_test:
|
h_test:
|
||||||
rm -f tests/h_test.out
|
rm -f tests/h_test.out
|
||||||
$(CC) $(CFLAGS)$(PWD) tests/h_test.cpp lib/heap.cpp -o tests/h_test.out
|
$(CC) $(CFLAGS)$(PWD_V) tests/h_test.cpp lib/heap.cpp -o tests/h_test.out
|
||||||
|
|
||||||
h_test_vg:
|
h_test_vg:
|
||||||
make h_test
|
make h_test
|
||||||
|
|
@ -18,7 +19,7 @@ h_test_vg:
|
||||||
|
|
||||||
linker:
|
linker:
|
||||||
rm -f tests/linker.out
|
rm -f tests/linker.out
|
||||||
$(CC) $(CFLAGS)$(PWD) tests/linker.cpp lib/heap.cpp -o tests/linker.out
|
$(CC) $(CFLAGS)$(PWD_V) tests/linker.cpp lib/heap.cpp -o tests/linker.out
|
||||||
|
|
||||||
linker_vg:
|
linker_vg:
|
||||||
make linker
|
make linker
|
||||||
|
|
|
||||||
|
|
@ -119,13 +119,25 @@ namespace GC {
|
||||||
|
|
||||||
// Not optimal for now, it doesn't have to loop over all objects
|
// Not optimal for now, it doesn't have to loop over all objects
|
||||||
// but mark needs some refinements before this can be optimised
|
// but mark needs some refinements before this can be optimised
|
||||||
|
// sweep apparently only sweeps chunks of odd size, eventhough the're not marked
|
||||||
void Heap::sweep() {
|
void Heap::sweep() {
|
||||||
for (size_t i = 0; i < m_allocated_chunks.size(); i++) {
|
/* for (char i = 0; i < m_allocated_chunks.size();) {
|
||||||
auto chunk = m_allocated_chunks.at(i);
|
auto chunk = m_allocated_chunks.at(i);
|
||||||
|
std::cout << "Current chunk: " << chunk->start << std::endl;
|
||||||
if (chunk->marked == false) {
|
if (chunk->marked == false) {
|
||||||
|
std::cout << "The current chunk was removed" << std::endl;
|
||||||
m_allocated_chunks.erase(m_allocated_chunks.begin() + i);
|
m_allocated_chunks.erase(m_allocated_chunks.begin() + i);
|
||||||
m_freed_chunks.push_back(chunk);
|
m_freed_chunks.push_back(chunk);
|
||||||
}
|
}
|
||||||
|
} */
|
||||||
|
// This captures the wierd behavior or my lack of knowledge of vectors
|
||||||
|
for (auto chunk : m_allocated_chunks) {
|
||||||
|
if (!chunk->marked) {
|
||||||
|
auto it = std::find(m_allocated_chunks.begin(), m_allocated_chunks.end(), chunk);
|
||||||
|
if (it != m_allocated_chunks.end())
|
||||||
|
m_allocated_chunks.erase(it);
|
||||||
|
m_freed_chunks.push_back(chunk);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -168,20 +180,20 @@ namespace GC {
|
||||||
*/
|
*/
|
||||||
// For testing purposes
|
// For testing purposes
|
||||||
void Heap::print_line(Chunk *chunk) {
|
void Heap::print_line(Chunk *chunk) {
|
||||||
std::cout << "Marked: " << chunk->marked << "\nStart adr: " << chunk->start << "\nSize: " << chunk->size << " B" << std::endl;
|
std::cout << "Marked: " << chunk->marked << "\nStart adr: " << chunk->start << "\nSize: " << chunk->size << " B\n" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Heap::print_contents() {
|
void Heap::print_contents() {
|
||||||
if (m_allocated_chunks.size()) {
|
if (m_allocated_chunks.size()) {
|
||||||
std::cout << "ALLOCATED CHUNKS" << std::endl;
|
std::cout << "\nALLOCATED CHUNKS #" << m_allocated_chunks.size() << std::endl;
|
||||||
for (auto chunk : m_allocated_chunks) {
|
for (auto chunk : m_allocated_chunks) {
|
||||||
print_line(chunk);
|
print_line(chunk);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
std::cout << "NO ALLOCATIONS" << std::endl;
|
std::cout << "NO ALLOCATIONS\n" << std::endl;
|
||||||
}
|
}
|
||||||
if (m_freed_chunks.size()) {
|
if (m_freed_chunks.size()) {
|
||||||
std::cout << "FREED CHUNKS" << std::endl;
|
std::cout << "\nFREED CHUNKS #" << m_freed_chunks.size() << std::endl;
|
||||||
for (auto fchunk : m_freed_chunks) {
|
for (auto fchunk : m_freed_chunks) {
|
||||||
print_line(fchunk);
|
print_line(fchunk);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,11 +12,16 @@ void init() {
|
||||||
auto temp1 = gc->alloc(sizeof(a_ptr));
|
auto temp1 = gc->alloc(sizeof(a_ptr));
|
||||||
auto temp2 = gc->alloc(sizeof(live_int_vec));
|
auto temp2 = gc->alloc(sizeof(live_int_vec));
|
||||||
auto temp3 = gc->alloc(sizeof(dead_int_vec));
|
auto temp3 = gc->alloc(sizeof(dead_int_vec));
|
||||||
a_ptr = nullptr;
|
|
||||||
|
// *arr, *temp1, *temp2 and *temp3 should all be on the stack
|
||||||
|
//a_ptr = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
init();
|
//init();
|
||||||
|
for (int i = 1; i < 10; i++) {
|
||||||
|
gc->alloc(sizeof(i));
|
||||||
|
}
|
||||||
gc->collect(MARK | SWEEP);
|
gc->collect(MARK | SWEEP);
|
||||||
gc->print_contents();
|
gc->print_contents();
|
||||||
//delete gc;
|
//delete gc;
|
||||||
|
|
|
||||||
20
src/GC/tests/h_test.out.dSYM/Contents/Info.plist
Normal file
20
src/GC/tests/h_test.out.dSYM/Contents/Info.plist
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
|
<string>English</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>com.apple.xcode.dsym.h_test.out</string>
|
||||||
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
<string>6.0</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>dSYM</string>
|
||||||
|
<key>CFBundleSignature</key>
|
||||||
|
<string>????</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>1.0</string>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>1</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
BIN
src/GC/tests/h_test.out.dSYM/Contents/Resources/DWARF/h_test.out
Normal file
BIN
src/GC/tests/h_test.out.dSYM/Contents/Resources/DWARF/h_test.out
Normal file
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue